如何锁定远程计算机的屏幕?

如何锁定远程计算机的屏幕?

https://unix.stackexchange.com/a/505644/674

当您使用 SSH 时,您可以使用 ssh -X 或 ssh -Y 访问您连接的屏幕。程序可以完美地在一台机器上运行并在另一台机器上显示。因此,如果您通过 SSH 在远程计算机上运行 light-locker,它将锁定您的本地显示而不是远程显示(就像运行 gnome-terminal 或任何其他命令将在远程计算机上运行它但在本地显示它一样)。

如果您想让屏幕再次锁定,是的,您必须重新启动它,但请小心从您要锁定的 X 会话重新启动它,而不是从 ssh 重新启动它。

我通过 ssh 连接到一台机器,然后想要锁定其屏幕。谁能告诉我为什么失败以及我该怎么办?谢谢。

$ xscreensaver-command -lock
xscreensaver-command: warning: $DISPLAY is not set: defaulting to ":0.0".
xscreensaver-command: no screensaver is running on display :0.0

$ DISPLAY=:0 xscreensaver-command -lock
xscreensaver-command: no screensaver is running on display :0

不确定如何判断远程主机上没有运行 X 服务器:

$ ps -A | grep -i xorg
  448 ?        00:00:29 Xorg
  605 ?        00:00:27 Xorg
  766 tty7     05:19:26 Xorg
 2175 ?        00:02:58 Xorg
 3343 ?        00:00:24 Xorg
 8520 ?        00:00:28 Xorg
12564 ?        00:00:22 Xorg
24655 ?        00:00:13 Xorg
26692 ?        00:00:28 Xorg
26704 ?        00:00:25 Xorg
26852 ?        00:00:29 Xorg
27034 ?        00:00:23 Xorg

答案1

您需要了解 X 的工作原理。您拥有本地计算机 LOC 和 ssh 到远程计算机 REM。您有两个 X 显示: LOC:0.0 和 REM:0.0 。当您ssh -X REM从 LOC 运行时,您会在 REM 上创建一个新的虚拟 X 显示,即“REM:10.0”并指向“LOC:0.0”。因此,当您在 REM 上运行程序时,其图形会发送到 REM:10,然后从那里发送到它们出现的 LOC:0.0。

如果您在 REM 上运行 VNC 服务器,它将显示为“REM:1.0”(例如)。您可以在同一台计算机上运行许多不同的 X 显示,将应用程序的输出发送到不同的物理或虚拟屏幕。

现在,当您连接到 REM 时,如果有用户在本地登录,使用“REM:0.0”、“REM:1.0”或其他 X 显示(VNC 只是特殊的 X 显示),您可以通过 ssh 在该屏幕上显示内容通过更改特殊变量“DISPLAY”的值。

如果您连接到计算机的本地控制台并运行,echo $DISPLAY您将得到 :0.0

如果您使用 ssh 从 LOC 连接到 REM,并希望在 REM 屏幕 (REM:0.0) 上显示您启动的应用程序,请更改 DISPLAY 的值:

export DISPLAY=:0.0

运行一个程序,它将显示在 REM 屏幕上(当然,如果会话是由同一用户打开的)。

就您而言,“REM:0.0”上必须有一个开放会话,但事实并非如此。如果会话使用 VNC 运行,则它必须是“REM:1.0”,因此要在那里运行 xscreensaver,您必须相应地设置 DISPLAY:

export DISPLAY=:1.0
xscreensaver
xscreensaver-command -lock

答案2

对于此解决方案,您必须安装 xdotool。这在我的 linux mint 上完美运行

export DISPLAY=:0
xdotool key Ctrl+alt+l

相关内容