我没有找到这个确切的问题,但我可能使用了错误的术语。在 Ubuntu 16.04 中,我能够通过 SSH 启动图形应用程序,方法是先运行:
export DISPLAY=0.0
那么在同一个 SSH 会话中启动时任何图形程序都会打开。
例如nohup sudo -u $LOCALUSER gedit &
将开放gedit
给本地用户使用。
我知道从老化的 X11 切换到 Wayland 是它不再起作用的原因。
在 17.10/Wayland 中,目前如何实现这一点?我的大多数工作站都是由访问受限的本地操作员远程管理的。对此,最好有一个单行解决方案。我们无法从初始安装中进行任何复杂的修改。缺乏信息使我认为这在默认安装中是不可能的,需要系统修改。默认系统上的“单行”是否允许通过 SSH 启动 GUI 应用程序?
如果不可能的话,我们可以等到此更新完成后再升级。
答案1
目前,X11 是一种非常老旧的技术。要使用 wayland 执行此操作,请在 GNOME 终端窗口中检查:
$ echo $DISPLAY $XAUTHORITY
:0 /run/user/1000/gdm/Xauthority
在 ssh 会话中,定义这两个值:
XAUTHORITY=/run/user/1000/gdm/Xauthority DISPLAY=:0 gedit
已验证可在 Ubuntu 19.04 上运行。
答案2
我发现,如果您以登录图形会话的同一用户身份进行 ssh,则无需任何其他步骤即可启动图形程序。
如果您以 root 或其他用户身份使用 ssh,则需要设置一些环境变量。
如果您设置一下它就已经起作用了XDG_RUNTIME_DIR
:
XDG_RUNTIME_DIR="/run/user/$(id -u demouser)" runuser -u demouser -- gedit
但是,这会显示警告消息,因为缺少一些环境变量。我们可以使用 获得更完整的环境systemctl --user show-environment
。
为了使用此功能,我们可以创建一个小型包装脚本,该脚本使用这些环境变量运行命令。我们称之为/usr/local/bin/env-wrapper
。
#!/bin/bash
set -o allexport
XDG_RUNTIME_DIR="/run/user/$(id -u)"
eval "$(systemctl --user show-environment)"
exec "$@"
然后我们可以像这样使用它:
runuser -u demouser -- /usr/local/bin/env-wrapper gedit