linux - 如何从 X session 之外(例如从控制台或 SSH)运行 X 程序

如果不是在控制台上登录的人,我如何运行 X 应用程序并让它在 X session 中显示?假设我是 root,或者我是登录的同一个用户,所以原则上我有权这样做。但是我如何说服 X 相信这一点呢?

此类情况的一些示例:

  • 使用 SSH 登录并运行显示在远程计算机屏幕上的程序(通过 SSH 建立隧道——完全不同)
  • 通过 ImageMagick 的 import 命令截取 X session 屏幕截图的 cron 作业
  • 为审计目的运行击键记录器

这是 Launch OpenGL app straight from a windowless Linux Terminal 的更简单版本

最佳答案

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

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

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

export XAUTHORITY=/home/$your_username/.Xauthority
export DISPLAY=':0'

关于linux - 如何从 X session 之外(例如从控制台或 SSH)运行 X 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1584411/

相关文章:

linux - Bash 将 awk 的输出捕获到数组中

c++ - 当父进程被杀死时,使用 fork() 创建的子进程是否会自动被杀死?

linux - 使用 find 和 -exec {},有没有办法计算总数?

android - 如何构建在 Android 上运行的 native (命令行)可执行文件?

linux - 在Linux中使用空格设置环境变量

linux - Linux 的可视化补丁工具

c - 合并多个 .so 共享库

linux - Linux AMD64 中如何使用 fs/gs 寄存器?

linux - 通过 ssh 在远程服务器上执行命令

python - 在 Python 上模拟鼠标点击