运行 不调用 sudo 的基于显示的程序/不是 root

Running a display-based program without calling sudo / not as root

我有一个 Ubuntu 服务器,运行 是一个使用 GPU 的程序。 到目前为止,为了运行我的程序,我一直在调用

然而,这需要我以 root 身份 运行 我的应用程序,因为 root 拥有该 :0 文件。最后,我的问题是如何配置我的系统来避免这种情况?

一些背景:

此服务器当前配置为在启动时启动 lig​​htdm。 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 了:

一切都很好,但不是可部署的解决方案。所以还有其他问题:

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

有几种可能性。

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

xhost +SI:localuser:USERNAME

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


另一种可能性是,如果 X 以 X extension SECURITY 运行,则从 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)

restarting Xorg with -auth “$HOME/.Xauthority”

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

创建一个 cookie

我不确定你想要完成什么;请注意,允许多个用户访问同一个 X 显示器是一种安全风险/隐私泄露。 X 客户端可以相互监视。