如何在 gdm 上配置默认 DISPLAY 变量以使 x11vnc 工作(在 CentOS 8 中从 CentOS 7 更改)

如何在 gdm 上配置默认 DISPLAY 变量以使 x11vnc 工作(在 CentOS 8 中从 CentOS 7 更改)

问题:GDM/KDE 在 CentOS 8 中默认使用 DISPLAY :1 而不是 DISPLAY :0,我希望它像在 CentOS 7 中一样使用 DISPLAY:0。这会影响 x11vnc 并导致 VNC 进入机器时更加令人头痛(我现在根本无法通过 VNC 进入登录屏幕)。

旧/工作版本

  • 操作系统7
  • KDE SC 版本 4.14.8
  • GDM 版本 3.28.2

当 ssh 进入旧机器运行 x11vnc 时,我们可以看到 :0 是 DISPLAY

$ w -us
USER   TTY   FROM  IDLE   WHAT
user   :0    :0    ?xdm?  /bin/sh /usr/bin/startkde

损坏/新版本

  • CentOS Stream 8
  • KDE 等离子版本:5.18.4
  • GDM 版本 40.0

当 ssh'ing 到新机器运行 x11vnc 时,我们可以看到 :1 是 DISPLAY

$ w -us
USER   TTY   FROM  IDLE   WHAT
user   :1    :1    ?xdm?  /usr/libexec/gdm-x-session --register-session --run-script /usr/bin/startplasma-x11
user   pts/0 :1   46:05  kded5

因此,现在要在 CentOS 8 上的登录会话中启动 x11vnc,我需要运行x11vnc -display :1,这不是什么大问题,只是有点烦人并影响一些脚本。更大的问题是我现在无法通过 VNC 进入登录屏幕。使用 off 变体ssh -X x11vnc -display :1、以 root 身份运行等等。

两者都有完全相同的 ssh 配置(X11 转发等)。

编辑:

尝试通过 VNC 进入登录屏幕时出错:

~> ssh user@centos8
$ echo $DISPLAY 

$ x11vnc # this works on CentOS 7 w/ and w/o X11 forwarding 
...
10/06/2021 16:28:55 *** XOpenDisplay failed. No -display or DISPLAY.
Invalid MIT-MAGIC-COOKIE-1 key10/06/2021 16:28:59 XOpenDisplay(":0") failed.
10/06/2021 16:28:59 Trying again with XAUTHLOCALHOSTNAME=localhost ...
Invalid MIT-MAGIC-COOKIE-1 key10/06/2021 16:28:59 XOpenDisplay(":0") failed.
10/06/2021 16:28:59 Trying again with unset XAUTHLOCALHOSTNAME ...
Invalid MIT-MAGIC-COOKIE-1 key10/06/2021 16:28:59 
...
10/06/2021 16:28:59 ***************************************
10/06/2021 16:28:59 *** XOpenDisplay failed (:0)
...

$ x11vnc -display :1
10/06/2021 16:30:16 *** XOpenDisplay failed (:1)
$ exit

~> ssh -X user@centos8
$ echo $DISPLAY
localhost:10.0
$ x11vnc
...
10/06/2021 16:24:16 WARNING: DISPLAY starts with localhost: 'localhost:10.0'
10/06/2021 16:24:16 WARNING: Is this an SSH X11 port forwarding?  You most
10/06/2021 16:24:16 WARNING: likely don't want x11vnc to use that DISPLAY.
10/06/2021 16:24:16 WARNING: You probably should supply something
10/06/2021 16:24:16 WARNING: like: -display :0  to access the physical
10/06/2021 16:24:16 WARNING: X display on the machine where x11vnc is running.
...
X11 MIT Shared Memory Attach failed:
  Is your DISPLAY=localhost:10.0 on a remote machine?
  Note:   DISPLAY=localhost:N suggests a SSH X11 redir to a remote machine.
  Suggestion, use: x11vnc -display :0 ... for local display :0

caught X11 error:
10/06/2021 16:24:17 deleted 53 tile_row polling images.
X Error of failed request:  BadRequest (invalid request code or no such operation)
  Major opcode of failed request:  130 (MIT-SHM)
  Minor opcode of failed request:  1 (X_ShmAttach)
  Serial number of failed request:  56
  Current serial number in output stream:  111

$ x11vnc -display :1 
...
10/06/2021 16:26:16 *** XOpenDisplay failed (:1)
...

以 root 身份运行类似错误

答案1

我从 CentOS7 gdm-3.28.2-26.el7.x86_64.rpm 和pulseaudio-gdm-hooks-10.0-6.el7_9.x86_64.rpm 下载并使用以下命令在 Rocky Linux 8 (8.4) 上安装(降级)这两个软件包: dnf 安装 gdm-3.28.2-26.el7.x86_64.rpmpulseaudio-gdm-hooks-10.0-6.el7_9.x86_64.rpm

这个稍旧版本中的 gdm 使用“DISPLAY :0”,我可以使用 x11vnc 登录登录屏幕。不确定 gdm 有哪些依赖项以及可能会发生哪些副作用。更新操作系统将重新安装使用“DISPLAY :1”的 Rocky Linux 8 的较新 gdm 版本。

答案2

我也有同样的问题,真的很烦人。我的强力解决方案只是将 VNC 包装在脚本中,尝试显示 :0 和 :1。 :0 始终是登录屏幕,:1 始终是 gnome 会话。这样,我就可以通过 VNC 进入工作站并登录。然后 VNC 会话终止,我必须重新启动它,然后我才能看到我的桌面。注销也会杀死 X,因此 VNC 会话再次终止。

就像是,

(
while true; do
   for displayNum in {0..1} ; do
      if ! pgrep -f "x11vnc -repeat -display" > /dev/null; then

         currentUserId=$(pgrep -x gnome-shell |
                         xargs --no-run-if-empty ps -ho uid |
                         awk '{print $1}')

         x11vnc -repeat -display ":${displayNum}" -rfbport 5900 \
                -shared -auth /run/user/${currentUserId}/gdm/Xauthority \
                -forever
         sleep 0.5
      else
         sleep 10
      fi
   done
done
) &

相关内容