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