【问题标题】:How to share home directory for different users of GUI desktop application?如何为 GUI 桌面应用程序的不同用户共享主目录?
【发布时间】:2015-08-24 20:50:14
【问题描述】:

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

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

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

根=Tk() ... _tkinter.TclError:无法连接以显示“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

如果我手动将 .Xauthority 的模式更改为 660,我的 GUI 程序对 User2 运行良好。

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

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

init:/home/tunet/.config/upstart:无法加载配置:权限被拒绝 init:dbus 预启动进程 (2658) 以状态 1 终止

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

【问题讨论】:

    标签: python user-interface ubuntu permissions


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-05-23
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      相关资源
      最近更新 更多