如果不是登录控制台的人,如何运行X应用程序并将其显示在该X会话上?假设我是root用户,或者我是登录的用户,因此原则上我有继续执行此操作。但我怎么说服X呢?
这种情况的一些例子:
import
命令获取X会话屏幕截图的cron作业这是Launch OpenGL app straight from a windowless Linux Terminal
的更简单版本答案 0 :(得分:41)
简短的回答是你必须设置DISPLAY
环境变量,然后应用才会运行。
答案很长,我们有Xauth,除非您在同一台计算机上运行同一台用户,除非您将运行X服务器的帐户中的Xauth凭据导出到帐户,否则可能无法运行运行X客户端。 ssh -X
为您处理此问题,这就是为什么它很棒,但手动过程涉及在X服务器帐户上运行xauth extract - $DISPLAY
并将该数据提供给客户帐户上的xauth merge -
。 (警告:数据是二进制的。)
在现代Linux系统上,有一个X会话位于:0且X11权限数据文件始终为$HOME/.Xauthority
,因此您通常可以设置两个环境变量,例如,在Bash中:
export XAUTHORITY=/home/$your_username/.Xauthority
export DISPLAY=':0'
答案 1 :(得分:17)
结果是你必须知道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)=/ }'