在 Wayland 中通过 SSH 启动 GUI 程序(Ubuntu 17.10)

在 Wayland 中通过 SSH 启动 GUI 程序(Ubuntu 17.10)

我没有找到这个确切的问题,但我可能使用了错误的术语。在 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

相关内容