저는 아치 x86_64에 CentOS 7과 x11vnc 버전 0.9.13(버전 11.el7)을 사용하고 있습니다.
다음과 같이 두 개의 화면(:10.0 및 :10.1)으로 Xvfb를 만듭니다.
sudo Xvfb :10 -screen 0 1366x768x24+32 -screen 1 1066x768x24+32 -br +bs -ac &
첫 번째 화면에서 x11vnc를 시작합니다.
sudo x11vnc -display :10.0 -ncache 0 -rfbport 9999 -shared -forever -debug_ncache &
VNC 서버를 사용하여 해당 화면을 사용할 수 있습니다. 작동합니다. 예를 들어 그 화면에서 Firefox를 엽니다.
x11vnc를 종료하고 다른 것을 시작하지만 두 번째 화면에서는 다음과 같습니다.
sudo x11vnc -display :10.1 -ncache 0 -rfbport 10000 -shared -forever -debug_ncache &
VNC 서버를 사용하여 해당 화면을 사용할 수 있습니다. 작동합니다. 예를 들어 그 화면에서 Chrome을 엽니다.
이제 x11vnc를 다시 종료하고 두 서버를 모두 시작합니다. 첫 번째 화면부터 두 번째 화면까지 시작합니다.
sudo x11vnc -display :10.0 -ncache 0 -rfbport 9999 -shared -forever -debug_ncache &
sudo x11vnc -display :10.1 -ncache 0 -rfbport 10000 -shared -forever -debug_ncache &
VNC 서버를 사용하여 첫 번째 화면을 사용할 수 있습니다. 작동하고 Firefox 창을 볼 수 있습니다.
그러나 두 번째 VNC에 연결하려고 하면 다음 추적과 함께 충돌이 발생합니다.
*** buffer overflow detected ***: x11vnc terminated
======= Backtrace: =========
/lib64/libc.so.6(__fortify_fail+0x37)[0x7fd434365597]
/lib64/libc.so.6(+0x10c750)[0x7fd434363750]
/lib64/libc.so.6(+0x10e507)[0x7fd434365507]
/lib64/libvncserver.so.0(rfbProcessNewConnection+0x114)[0x7fd436d01764]
/lib64/libvncserver.so.0(rfbCheckFds+0x3f8)[0x7fd436d01c98]
/lib64/libvncserver.so.0(rfbProcessEvents+0x1d)[0x7fd436cf8c3d]
x11vnc[0x4a0951]
x11vnc[0x463d8a]
x11vnc[0x410c0a]
/lib64/libc.so.6(__libc_start_main+0xf5)[0x7fd434278b15]
x11vnc[0x41b201]
======= Memory map: ========
00400000-00542000 r-xp 00000000 fd:00 14735 /usr/bin/x11vnc
00741000-00742000 r--p 00141000 fd:00 14735 /usr/bin/x11vnc
00742000-00788000 rw-p 00142000 fd:00 14735 /usr/bin/x11vnc
00788000-00ad0000 rw-p 00000000 00:00 0 [heap]
7fd42f627000-7fd42f63c000 r-xp 00000000 fd:00 38 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
7fd42f63c000-7fd42f83b000 ---p 00015000 fd:00 38 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
7fd42f83b000-7fd42f83c000 r--p 00014000 fd:00 38 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
7fd42f83c000-7fd42f83d000 rw-p 00015000 fd:00 38 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
7fd42f83d000-7fd42f868000 rw-s 00000000 00:04 913866832 /SYSV00000000 (deleted)
7fd42f868000-7fd42f892000 rw-s 00000000 00:04 913834063 /SYSV00000000 (deleted)
7fd42f892000-7fd42f8bb000 rw-s 00000000 00:04 913801294 /SYSV00000000 (deleted)
7fd42f8bb000-7fd42f8e3000 rw-s 00000000 00:04 913768525 /SYSV00000000 (deleted)
7fd42f8e3000-7fd42f90a000 rw-s 00000000 00:04 913735756 /SYSV00000000 (deleted)
7fd42f90a000-7fd42f930000 rw-s 00000000 00:04 913702987 /SYSV00000000 (deleted)
7fd42f930000-7fd42f955000 rw-s 00000000 00:04 913670218 /SYSV00000000 (deleted)
7fd42f955000-7fd42f979000 rw-s 00000000 00:04 913637449 /SYSV00000000 (deleted)
7fd42f979000-7fd42f99c000 rw-s 00000000 00:04 913604680 /SYSV00000000 (deleted)
7fd42f99c000-7fd42f9be000 rw-s 00000000 00:04 913571911 /SYSV00000000 (deleted)
7fd42f9be000-7fd42f9df000 rw-s 00000000 00:04 913539142 /SYSV00000000 (deleted)
7fd42f9df000-7fd42f9ff000 rw-s 00000000 00:04 913506373 /SYSV00000000 (deleted)
7fd42f9ff000-7fd42fa1e000 rw-s 00000000 00:04 913473604 /SYSV00000000 (deleted)
7fd42fa1e000-7fd42fe1f000 rw-p 00000000 00:00 0
7fd42fe1f000-7fd430220000 rw-s 00000000 00:04 912457765 /SYSV00000000 (deleted)
7fd430220000-7fd430244000 r-xp 00000000 fd:00 4260 /usr/lib64/liblzma.so.5.0.99
7fd430244000-7fd430443000 ---p 00024000 fd:00 4260 /usr/lib64/liblzma.so.5.0.99
7fd430443000-7fd430444000 r--p 00023000 fd:00 4260 /usr/lib64/liblzma.so.5.0.99
7fd430444000-7fd430445000 rw-p 00024000 fd:00 4260 /usr/lib64/liblzma.so.5.0.99
7fd430445000-7fd4304a5000 r-xp 00000000 fd:00 4288 /usr/lib64/libpcre.so.1.2.0
7fd4304a5000-7fd4306a4000 ---p 00060000 fd:00 4288 /usr/lib64/libpcre.so.1.2.0
7fd4306a4000-7fd4306a5000 r--p 0005f000 fd:00 4288 /usr/lib64/libpcre.so.1.2.0
7fd4306a5000-7fd4306a6000 rw-p 00060000 fd:00 4288 /usr/lib64/libpcre.so.1.2.0
7fd4306a6000-7fd4306c7000 r-xp 00000000 fd:00 4383 /usr/lib64/libselinux.so.1
7fd4306c7000-7fd4308c7000 ---p 00021000 fd:00 4383 /usr/lib64/libselinux.so.1
7fd4308c7000-7fd4308c8000 r--p 00021000 fd:00 4383 /usr/lib64/libselinux.so.1
7fd4308c8000-7fd4308c9000 rw-p 00022000 fd:00 4383 /usr/lib64/libselinux.so.1
7fd4308c9000-7fd4308cb000 rw-p 00000000 00:00 0
7fd4308cb000-7fd4308d2000 r-xp 00000000 fd:00 4597 /usr/lib64/libffi.so.6.0.1
7fd4308d2000-7fd430ad1000 ---p 00007000 fd:00 4597 /usr/lib64/libffi.so.6.0.1
7fd430ad1000-7fd430ad2000 r--p 00006000 fd:00 4597 /usr/lib64/libffi.so.6.0.1
7fd430ad2000-7fd430ad3000 rw-p 00007000 fd:00 4597 /usr/lib64/libffi.so.6.0.1
7fd430ad3000-7fd430ada000 r-xp 00000000 fd:00 11023 /usr/lib64/librt-2.17.so
7fd430ada000-7fd430cd9000 ---p 00007000 fd:00 11023 /usr/lib64/librt-2.17.so
7fd430cd9000-7fd430cda000 r--p 00006000 fd:00 11023 /usr/lib64/librt-2.17.so
7fd430cda000-7fd430cdb000 rw-p 00007000 fd:00 11023 /usr/lib64/librt-2.17.so
7fd430cdb000-7fd430cdd000 r-xp 00000000 fd:00 13338 /usr/lib64/libXau.so.6.0.0
7fd430cdd000-7fd430edd000 ---p 00002000 fd:00 13338 /usr/lib64/libXau.so.6.0.0
7fd430edd000-7fd430ede000 r--p 00002000 fd:00 13338 /usr/lib64/libXau.so.6.0.0
7fd430ede000-7fd430edf000 rw-p 00003000 fd:00 13338 /usr/lib64/libXau.so.6.0.0
7fd430edf000-7fd430ee2000 r-xp 00000000 fd:00 4978 /usr/lib64/libkeyutils.so.1.5
7fd430ee2000-7fd4310e1000 ---p 00003000 fd:00 4978 /usr/lib64/libkeyutils.so.1.5
7fd4310e1000-7fd4310e2000 r--p 00002000 fd:00 4978 /usr/lib64/libkeyutils.so.1.5
7fd4310e2000-7fd4310e3000 rw-p 00003000 fd:00 4978 /usr/lib64/libkeyutils.so.1.5
7fd4310e3000-7fd4310f0000 r-xp 00000000 fd:00 5356 /usr/lib64/libkrb5support.so.0.1
7fd4310f0000-7fd4312f0000 ---p 0000d000 fd:00 5356 /usr/lib64/libkrb5support.so.0.1
7fd4312f0000-7fd4312f1000 r--p 0000d000 fd:00 5356 /usr/lib64/libkrb5support.so.0.1
7fd4312f1000-7fd4312f2000 rw-p 0000e000 fd:00 5356 /usr/lib64/libkrb5support.so.0.1
7fd4312f2000-7fd431368000 r-xp 00000000 fd:00 4770 /usr/lib64/libgmp.so.10.2.0
7fd431368000-7fd431567000 ---p 00076000 fd:00 4770 /usr/lib64/libgmp.so.10.2.0caught signal: 6
11/10/2016 17:24:00 deleted 43 tile_row polling images.
이제 x11vnc 서버를 역순으로 시작하겠습니다. 먼저 두 번째 화면, 그 다음 첫 번째 화면:
sudo x11vnc -display :10.1 -ncache 0 -rfbport 10000 -shared -forever -debug_ncache &
sudo x11vnc -display :10.0 -ncache 0 -rfbport 9999 -shared -forever -debug_ncache &
VNC를 사용하여 screen:10.1(두 번째 화면이지만 첫 번째 x11vnc가 시작됨)에 도달하려고 하면 작동합니다. Chrome 창이 표시됩니다.
그러나 screen:10.0(마지막 x11vnc 서버가 시작됨)에 연결하려고 하면 x11vnc가 위와 동일한 추적으로 충돌합니다(첫 번째 x11vnc 서버는 여전히 손상되지 않고 정상적으로 실행 중입니다).
참고: 저는 Windows에서 RealVNC와 TightVNC를 클라이언트로 사용하고 있습니다.
둘 다 두 번째 서버를 충돌시켰습니다.
참고 2: 각각 하나의 화면(0)만 있는 모니터 :10 및 :11에서 두 개의 별도 Xvfbs를 실행하고 두 개의 x11vnc 서버를 :10 및 :11로 지정하면 동일한 충돌이 발생합니다.
참고 3: 저는 Xvfb와 x11vnc를 루트로 실행하고 있습니다. 일반 사용자로 실행하면 동일한 충돌이 발생합니다.
내가 뭘 잘못했나요?
하나의 x11vnc 서버를 시작하고 두 개의 X11 화면에 두 개의 포트를 제공하는 방법이 있습니까?
이것은 x11vnc의 버그입니까?
답변1
내 시스템에 설치된 libvncserver 버전에 문제가 있는 것 같습니다.
하지만 최신 버전입니다.
x11vnc는 자체 libvnc서버를 사용하도록 컴파일될 수 있습니다.
x11vnc에서 libvncserver의 소스 코드를 읽었습니다. 여기에는 충돌을 일으키는 방법이 포함되어 있지 않습니다.
그래서 gcc, 모든 -devel 라이브러리를 설치하고 x11vnc를 다시 컴파일하고 설치하는 등의 작업을 수행하면 작동할 것이라고 생각했습니다.
아마도.
대신 다른 솔루션을 사용했습니다.
Xvnc는 메모리 내 X 서버와 VNC 서버를 모두 실행할 수 있습니다.
그리고 그것은 충돌하지 않습니다.
그래서 지금은 이 구성을 사용하고 있습니다.