Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ubuntu 运行基于显示的程序而不以root用户身份调用sudo/not_Ubuntu_Permissions_Xorg_Xserver - Fatal编程技术网

Ubuntu 运行基于显示的程序而不以root用户身份调用sudo/not

Ubuntu 运行基于显示的程序而不以root用户身份调用sudo/not,ubuntu,permissions,xorg,xserver,Ubuntu,Permissions,Xorg,Xserver,我有一个Ubuntu服务器,它运行一个使用gpu的程序。 到目前为止,为了运行我的程序,我一直在打电话 导出显示=:0 export-XAUTHORITY=/var/run/lightdm/root/:0 但是,这需要我以root身份运行应用程序,因为root拥有:0文件。最后,我的问题是如何配置我的系统来避免这种情况 一些背景: 此服务器当前配置为在启动时启动lightdm。lightdm依次启动Xorg,使用-auth/var/run/sddm/root/:0,这样ps-aux将其显示为

我有一个Ubuntu服务器,它运行一个使用gpu的程序。 到目前为止,为了运行我的程序,我一直在打电话

  • 导出显示=:0
  • export-XAUTHORITY=/var/run/lightdm/root/:0
但是,这需要我以root身份运行应用程序,因为root拥有:0文件。最后,我的问题是如何配置我的系统来避免这种情况

一些背景:

此服务器当前配置为在启动时启动lightdm。lightdm依次启动Xorg,使用-auth/var/run/sddm/root/:0,这样
ps-aux
将其显示为一个进程:

/usr/lib/xorg/Xorg -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
在玩游戏时,我成功地通过以下方式配置了所有内容,因此不需要sudo:

  • 调用导出XAUTHORITY=~/.XAUTHORITY
  • 在我的用户的.Xauthority文件中为0添加cookie
    mcookie|sed-e's/^/add:0./'|xauth
  • 停止lightdm
  • 使用
    -auth“$HOME/.Xauthority”重新启动Xorg
这一切都很好,但不是一个可部署的解决方案。因此,还有其他问题:


如果Xorg要在启动时启动,如何向特定用户提供访问权限?还是应该在用户登录时以某种方式打开它?如果我要从命令行执行所有操作,我甚至需要lightdm吗?我的选择是什么?最好的方法是什么

有几种可能性

允许使用xhost访问已经运行的X的简单方法(但不鼓励使用xhost,使用cookie被认为更安全):


另一种方法是像您那样从
ps-aux
中提取cookie名称,并将其复制到
~/.Xauthority
。将
~/.Xauthority
的所有权更改为用户。只有用户应该具有rw访问权限(
chmod 600


另一种可能是从X获得一个新的cookie,如果它运行在。请注意,您已经需要访问已在运行的X以获取新cookie:

xauth -f /home/USERNAME/.Xauthority generate $DISPLAY . trusted

标准方法:在开始使用X之前,为选项
-auth
创建cookie

export XAUTHORITY=$HOME/.Xauthority
export DISPLAY=:0
xauth -f $XAUTHORITY add $DISPLAY . $(mcookie)

使用-auth“$HOME/.Xauthority”重新启动Xorg

小心;检查
$HOME/.Xauthority
是否已存在且不为空;否则X运行时根本没有身份验证协议,每个人都可以访问它。而是自己用
xauth
创建一个cookie



我不知道你想完成什么;请注意,允许多个用户访问同一个X显示器是一个安全risc/隐私泄漏。X个客户可以互相监视。

谢谢您的回答!我想问题的最后一段暗示了我的想法方向——让系统在启动时(或登录时?)为特定用户提供访问权限。例如,让一些系统文件(比如/etc/Xaccess)指定用户/组的列表(通过他们的cookie?),并在引导/登录时为他们启用访问。你知道这是否有一个机制,或者一个简单的方法吗?一个后续问题。关于你的“标准方式”——这到底发生在哪里?我要用这个替换lightdm启动吗?我使用的是Ubuntu 16.04。一年后,我回到这里,意识到我忽略了你的第二个解决方案——或者至少最初误解了它。我注意到lightdm在每次启动时都会创建一个新的:0 cookie,这意味着我必须修改启动序列,以便将新cookie复制到有效用户。在哪里做这件事最好?澄清一下:您是否希望应用程序的一个运行实例可以被多个用户访问?或者应该让每个用户都有自己的独立实例?后者-每个用户都应该能够运行自己的实例(显然,只要用户得到系统的授权)。
export XAUTHORITY=$HOME/.Xauthority
export DISPLAY=:0
xauth -f $XAUTHORITY add $DISPLAY . $(mcookie)