如何为GUI桌面应用程序的不同用户共享主目录?

时间:2015-06-09 20:25:39

标签: python user-interface ubuntu permissions

我正在为现场支持人员开发笔记本GUI应用程序(即,任何时候只有一个用户登录系统)。在用户定义的会话中只启动了一个用户应用程序(即在Ubuntu Greeting上的/ usr / share / xsession /启动GUI应用程序中只有一个桌面格式文件)。当用户启动时,会要求他登录,当登录成功时,应用程序启动。当他/她退出时,会再次显示Ubuntu Greeting。

用户拥有单独的帐户(例如:用户1 用户2 用户3 ...),并且所有用户都属于同一个主要用户组(例如: tnet )并且都具有以组命名的相同主目录(例如:" / home / tnet")。我还创建了与组名对应的用户(但不允许他登录)。所有用户共享umask 002,使他们可以访问其他用户创建的文件。

一切正常对第一个用户(例如 user1 )有效,但GUI应用程序在第一个用户退出后无法运行而另一个用户尝试登录(例如 user2 )。在我的python程序中执行第一个语句之一时它失败了:

  root=Tk()
...
_tkinter.TclError: couldn't connect to display "localhost:10.0"

原因是$ HOME / .Xauthority中的隐藏文件仍由 user1 拥有权限600,程序无法为 user2 打开此文件。还有其他隐藏文件/目录具有类似模式(即不允许其他用户打开):

-rw-------  1 user1 tnet    414 Jun  9 12:09 .bash_history
drwx------ 10 user1 tnet   4096 Jun  9 12:11 .cache
drwx------  3 user1 tnet   4096 Jun  2 15:06 .compiz
drwx------ 14 user1 tnet   4096 Jun  3 11:27 .config
drwx------  3 user1 tnet   4096 Jun  2 15:13 .dbus

drwx------  3 user1 tnet   4096 Jun  3 11:26 .gconf
-rw-------  1 user1 tnet    946 Jun  3 11:26 .ICEauthority
drwx------  3 user1 tnet   4096 Jun  2 15:06 .local
-rw-------  1 tunet tnet    101 Jun  8 13:40 .Xauthority
-rw-------  2 user1 tnet      0 Jun  9 12:11 .Xauthority-c
-rw-------  2 user1 tnet      0 Jun  9 12:11 .Xauthority-l
-rw-------  1 user1 tnet    593 Jun  3 15:00 .xsession-errors
-rw-------  1 user1 tnet   1156 Jun  3 14:54 .xsession-errors.old

如果我手动将模式更改为660 for .Xauthority,我的GUI程序适用于 User2

我的问题是如何避免这个问题以及其他具有600模式的隐藏文件/目录可能存在的其他问题,我几乎不知道它们的用途是什么?再次只允许一个用户登录系统。

PS。 它不仅仅是$ HOME / .Xauthority的模式:当我写这个问题时,为了捕捉正在发生的事情,我远程登录ssh -Y user2 @(在这种情况下,在登录工作之前更改模式)。但是当我以user2身份登录本地时它根本不起作用 - 我看到的只是Ubuntu启动画面:-(更准确地说是在文件中.xsession-errors:

init:/home/tunet/.config/upstart: Unable to load configuration: Permission denied
init: dbus pre-start process (2658) terminated with status 1

因此我的问题不仅限于.Xauthority的文件模式。也许我必须完全改变方法。

1 个答案:

答案 0 :(得分:0)

嗯,答案是:不要为所有用户使用相同的主目录!首先这是个坏主意。而是将文件.xsession放在所有用户都有权访问的目录中。 (例如:/ usr / local / common /)

因此,要为系统的所有用户(而不是ubuntu桌面)运行相同的应用程序,我使用了@Takkak提供的问题How to share home directory for different users of GUI desktop application?的答案,修改了文件 custom.desktop中的Exec指令指向 /usr/local/common/.xsession ,创建 .xsession 文件,然后运行gui应用程序。所有用户都必须定义主要组(例如tnet)。 / usr / local / common / 的组所有权及其内容也必须为tnet。如果您不希望在Ubuntu问候语中选择任何其他桌面,请从 / usr / share / xsession / 中删除 * .desktop ,但custom.desktop除外。