x11vnc가 작동하도록 gdm에서 기본 DISPLAY 변수를 구성하는 방법(CentOS 7에서 CentOS 8로 변경됨)

x11vnc가 작동하도록 gdm에서 기본 DISPLAY 변수를 구성하는 방법(CentOS 7에서 CentOS 8로 변경됨)

문제: GDM/KDE는 기본적으로 CentOS 8에서 DISPLAY :0 대신 DISPLAY :1을 사용하도록 설정되어 있으며 CentOS 7에서처럼 DISPLAY :0을 사용하고 싶습니다. 이는 x11vnc에 영향을 미치고 시스템의 VNC에 더 많은 골칫거리를 야기합니다. (지금은 로그인 화면에 VNC를 전혀 사용할 수 없습니다.)

이전/작업 버전

  • 센트OS 7
  • KDE SC 버전 4.14.8
  • GDM 버전 3.28.2

x11vnc를 실행하기 위해 이전 시스템에 SSH로 연결하면 :0이 DISPLAY임을 알 수 있습니다.

$ 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

x11vnc를 실행하기 위해 새 시스템에 SSH로 연결하면 :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, 루트로 실행 등.

둘 다 정확히 동일한 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)에 이 두 패키지를 설치(다운그레이드)했습니다. dnf 설치 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"을 사용하는 최신 gdm 버전의 Rocky Linux 8이 다시 설치됩니다.

답변2

저도 같은 문제가 있어서 정말 짜증나네요. 내 무차별 대입 솔루션은 VNC를 스크립트 내부에 래핑하여 :0 및 :1 표시를 각각 시도하는 것이었습니다. :0은 항상 로그인 화면이고, :1은 항상 그놈 세션입니다. 이를 통해 워크스테이션에 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
) &

관련 정보