一尘不染

如何从X会话外部(例如从控制台或SSH)运行X程序

linux

在没有人登录控制台的情况下,如何运行X应用程序并将其显示在该X会话上?假设我要么是root用户,要么是登录的同一用户,所以原则上我有权这样做。但是我如何说服X呢?

这种情况的一些示例:

  • 使用SSH登录并运行在远程计算机屏幕上显示的程序( 不是 通过SSH隧道传输的-完全不同)
  • 一项cron作业,通过ImageMagick的import命令获取X会话的屏幕截图
  • 运行击键记录器以进行审核

这是直接从无窗口Linux终端启动的LaunchOpenGL应用程序的简单版本


阅读 362

收藏
2020-06-03

共1个答案

一尘不染

简短的答案是,您必须设置DISPLAY环境变量,然后应用程序将运行。

长答案是我们拥有Xauth,除非您在同一台计算机上以同一用户身份运行,否则除非将Xauth凭据从运行X服务器的帐户导出到运行X的帐户,否则可能无法正常工作客户。ssh -X为您解决这个问题,这就是为什么它很棒,但是手动过程涉及xauth extract - $DISPLAY在X服务器帐户上运行并将数据馈送到xauth merge -客户端帐户上。(警告:数据是二进制的。)

在现代Linux系统上,在0处有一个X会话,并且X11授权数据文件始终是,$HOME/.Xauthority因此您通常可以设置两个环境变量,例如在Bash中:

export XAUTHORITY=/home/$your_username/.Xauthority
export DISPLAY=':0'
2020-06-03