我正在为Ubuntu编写一个应用程序,它允许您自定义Unity2D桌面环境。
有些设置,我可以使用Dconf进行更改,这是特定于用户的.因此,如果一个用户更改了一个设置,它只适用于该用户。
但是,对于其他设置,我需要编辑位于/usr/share/unity-2d/中的文本文件,普通用户无法写入这些文本文件。为了解决这个问题,我认为让用户以根用户的身份运行应用程序是个好主意,这样可以确保他们能够访问/usr/share/unity-2d/。只有当应用程序以根用户的身份运行,而其中一个Dconf设置被更改时,它才会在根用户的Dconf中进行更改,因此这些更改不适用于实际用户。
我需要找到解决这个问题的方法,我的第一个实际想法是使用PolicyKit。我需要确保我的应用程序以当前用户的身份运行(所以并不总是以root用户的身份运行),但它确实可以访问/usr/share/unity-2d/和其中的文件。我正在使用Mono框架用C#编写应用程序。我对PolicyKit没有任何经验,老实说,这是我第一次尝试开发一个真正的Linux应用程序。
我的想法是PolicyKit,但是如果你们中的一个有另一种(现实的)方法来实现这一点,那也没关系。如果涉及到使用PolicyKit,我想了解更多关于如何做到这一点的信息,以及每件事都做些什么。我知道我可以使用pkexec运行我的应用程序,但实际上,我在应用程序中的一个按钮行中考虑了更多的问题,以解锁需要访问该目录的特性,该目录此时要求输入密码才能对文件夹中的文件进行写入访问。这样,在运行应用程序的系统上没有特殊权限的人仍然可以自定义一些基本设置。
发布于 2014-09-16 17:38:02
好的,最明显的解决方案是有两个进程,一个带有GUI的普通用户应用程序,另一个以root用户身份运行的程序,以根用户的身份操作文件。
例如,模拟的“仅限命令行”问题会将文件写入根文件:
sudo echo Hello World >/root/hello.txt
不工作,因为重定向是由交互式shell完成的,并且它没有根的访问权限。
经典的解决方案是使用两个过程:
echo Hello World | sudo tee /root/hello.txt
现在,tee打开/ root /hello.txt文件,该文件作为root(通过sudo)运行,这是允许的。
https://stackoverflow.com/questions/10322342
复制相似问题