x11vnc が動作するように gdm のデフォルトの DISPLAY 変数を設定する方法 (CentOS 7 から CentOS 8 で変更)

x11vnc が動作するように gdm のデフォルトの DISPLAY 変数を設定する方法 (CentOS 7 から CentOS 8 で変更)

問題: CentOS 8 では、GDM/KDE はデフォルトで DISPLAY :0 ではなく DISPLAY :1 を使用しますが、CentOS 7 のように DISPLAY :0 を使用するようにしたいです。これは x11vnc に影響し、マシンへの VNC にさらに問題を引き起こします (現在、ログイン画面に VNC で接続できません)。

古いバージョン/動作バージョン

  • セントOS7
  • KDE SC バージョン 4.14.8
  • GDM バージョン 3.28.2

古いマシンにsshで接続してx11vncを実行すると、:0がディスプレイであることがわかります。

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

壊れた/新しいバージョン

  • CentOS ストリーム 8
  • KDE プラズマ バージョン: 5.18.4
  • GDM バージョン 40.0

新しいマシンにssh接続してx11vncを実行すると、:1がディスプレイであることがわかります。

$ 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 できないことです。 をオフにしたり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)
...

ルートとして実行した場合の同様のエラー

答え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) にこれら 2 つのパッケージをインストール (ダウングレード) しました: dnf install gdm-3.28.2-26.el7.x86_64.rpm pulseaudio-gdm-hooks-10.0-6.el7_9.x86_64.rpm

この少し古いバージョンの gdm は「DISPLAY :0」を使用しており、x11vnc を使用してログイン画面にログインできます。gdm にどのような依存関係があり、どのような副作用が発生する可能性があるかは不明です。OS を更新すると、「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
) &

関連情報