我不确定我问的问题是否正确,所以这就是我真正想要做的:
我有一台服务器,上面连接着一个屏幕,没有其他设备。它正在运行 SSH 服务器。
我希望 Alice 能够连接到服务器并以“staff”身份运行命令以在屏幕上显示图片。例如...
ssh server sudo -u 'staff' gst-launch-1.0 playbin uri=file:///path/to/image.png
Alice 回家了,图像仍然显示。Bob 进来了,决定要一张不同的图像:
ssh server sudo -u 'staff' gst-launch-1.0 playbin uri=file:///path/to/other.png
需要如何启动和配置 X 服务器才能满足我的需求?只有“工作人员”用户才需要操作显示。
我知道我可以使用 xinit 在启动时启动服务器并运行我选择的程序。我应该运行什么程序?它应该做什么?我需要传递哪些环境变量?
答案1
在常见的 Linux 环境中,X 服务器使用 MIT-MAGIC-COOKIE-1 协议来授权对显示器的访问。任何想要访问显示器的用户都需要拥有正确的曲奇饼(通常存储在 ~/.Xauthority 文件中)。通常,cookie 由显示管理器(登录屏幕)生成。如果您从自定义脚本启动 X 服务器,则必须自行生成 cookie,并将其存储在权威文件并将该文件告知服务器。
您可以使用命令mcookie
生成 cookie 并将其添加到授权文件中xauth
:
# touch /home/staff/.Xauthority
# xauth -f /home/staff/.Xauthority add :0 . $(mcookie)
参数-f /home/staff/.Xauthority
告诉xauth
使用权限文件的职员用户。:0
是显示名称。点 ( .
) 指定 MIT-MAGIC-COOKIE-1 协议。mcookie
来自util-linux包裹。
现在如果你执行:
# xauth -f /home/staff/.Xauthority list
你应该看到类似这样的内容:
server/unix:0 MIT-MAGIC-COOKIE-1 c61bdc0b88cf0cb376e1b29647a8c4d6
当您以以下身份登录时职员用户应该会看到相同的输出没有-f 参数:
$ xauth list
server/unix:0 MIT-MAGIC-COOKIE-1 c61bdc0b88cf0cb376e1b29647a8c4d6
如果没有,请检查XAUTHORITY
环境变量是否未定义或者是否设置为“/home/staff/.Xauthority”。
使用参数启动X服务器-auth
:
# X -auth /home/staff/.Xauthority
现在职员用户可以访问显示:0
。剩下的唯一事情就是设置环境变量DISPLAY
——这可以通过参数来完成sudo
。因此,当您 ssh 到服务器并执行显示图像的命令职员用户则应该显示。使用 L. Levrel 建议的 ImageMagick,命令如下:
# ssh server sudo -u staff DISPLAY=:0 display -window root /path/to/image.png
笔记你不必使用职员用户。您可以在公共位置(例如 /var/tmp/xauthority)创建授权文件,并XAUTHORITY
为爱丽丝和鲍勃到那条路。
另一种方法是将 cookie“分发”给爱丽丝的和鲍勃的授权文件(这实际上与显示管理器所做的类似):
# xauth -f /var/tmp/xauthority extract - :0 | xauth -f /home/alice/.Xauthority merge
# xauth -f /var/tmp/xauthority extract - :0 | xauth -f /home/bob/.Xauthority merge
这边走爱丽丝和鲍勃无需执行任何操作sudo staff
即可访问显示屏。
笔记如果您有多个 X 服务器正在运行,则必须使用与:0
上述命令不同的显示名称(例如::1
、:2
等)。