如果不是在控制台login的人,我该如何运行X应用程序并在X会话中显示? 假设我是根,或者我是同一个用户login,所以原则上我有执行这个。 但是我怎么说服这个X?
这样的情况的一些例子:
import
命令截取X会话的cron作业 这是一个简单版本的Launch OpenGL应用程序直接从一个无窗口的Linuxterminal
简单的答案是你必须设置DISPLAY
环境变量,然后应用程序将运行。
长的答案是我们已经有了Xauth,并且除非您将Xauth凭证从运行X服务器的帐户导出到运行X的帐户,否则,除非您在同一台计算机上以相同用户身份运行,否则可能无法运行客户。 ssh -X
为你处理这个问题,这就是为什么它很棒,但手动过程包括在客户端帐户上运行X服务器帐户上的xauth extract - $DISPLAY
,并将该数据提供给xauth merge -
。 (警告:数据是二进制的。)
在现代Linux系统上,在0处有一个X会话,X11权限数据文件总是$HOME/.Xauthority
所以你可以经常设置两个环境变量,例如在Bash中:
export XAUTHORITY=/home/$your_username/.Xauthority export DISPLAY=':0'
结果是你必须知道X显示(放置在DISPLAY
环境变量中)和魔法cookie(放在一个文件中,文件名在XAUTHORITY
环境变量中)。
在运行X的系统上,如果您是root用户,或者您是登录到X的用户,那么只需假设最常见的显示和Cookie文件(适用于任何发行版的几乎任何标准桌面安装)。
env DISPLAY=:0 XAUTHORITY=/home/whoever/.Xauthority /path/to/my/X/program
从已经运行的X程序的环境中找到它们。 同样,如果您是root用户或登录的用户,则会告诉您(如果用户正在使用GNOME):
cat /proc/`pgrep -f ^x-session-manager`/environ \ | ruby -ne 'puts $_.split("\0").select { |e| e =~ /^(DISPLAY|XAUTHORITY)=/ }'