4

我正在为 Ubuntu 编写一个应用程序,它允许您自定义 Unity 2D 桌面环境。
一些设置,我可以使用用户特定的 Dconf 进行更改。因此,如果一个用户更改了一项设置,它仅适用于该用户。
但是,对于其他设置,我需要编辑/usr/share/unity-2d/普通用户无法写入的位于 中的文本文件。为了解决这个问题,我认为让用户以 root 身份运行应用程序是个好主意,这样可以确保他们可以访问/usr/share/unity-2d/. 仅当应用程序以 root 身份运行并且更改了 Dconf 设置之一时,它会在 root 用户的 Dconf 中更改,因此更改不适用于实际用户。

我需要找到解决这个问题的方法,而我的第一个现实想法是使用 PolicyKit。我需要确保我的应用程序以当前用户身份运行(因此并不总是以 root 身份运行),但它确实可以访问/usr/share/unity-2d/其中的文件。我正在使用 Mono 框架用 C# 编写应用程序。我对 PolicyKit 没有任何经验,老实说,这是我第一次尝试制作一个严肃的 Linux 应用程序。

我的想法是 PolicyKit,但如果你们中的一个人有另一种(现实的)方法来实现这一点,我也可以。如果归结为使用 PolicyKit,我想了解更多有关如何执行此操作以及所有操作的信息。我知道我可能只使用 运行我的应用程序pkexec,但实际上我在应用程序中的一个按钮行中更多地考虑解锁需要访问该目录的功能,此时需要密码才能获得写入权限文件夹中的文件。这样,对运行应用程序的系统没有特殊权限的人,仍然可以自定义一些基本设置。

4

1 回答 1

1

好吧,显而易见的解决方案是有两个进程,一个带有 GUI 的普通用户应用程序,以及以 root 身份运行的以 root 身份操作文件的东西。

例如,作为模拟“仅限命令行”问题,将以 root 身份写入文件:

sudo echo Hello World >/root/hello.txt

不起作用,因为重定向是由交互式 shell 完成的,并且它没有 root 访问权限。

经典的解决方案是使用两个过程:

echo Hello World | sudo tee /root/hello.txt

现在 /root/hello.txt 文件由 tee 打开,它以 root 身份运行(通过 sudo),这是允许的。

于 2014-09-16T17:38:02.903 回答