bersama catatan peribadi & teknikalnya.

Konfigurasi x11vnc Sebagai Pelayan Tempatan untuk Desktop Jauh

Hos: Debian, Klien: Arch Linux


geeky stuff
#x11vnc | #tigervnc | #remote-viewer | #vncviewer

Melalui perbincangan bersama anak-anak, saya jelaskan bahawa ada ketikanya saya akan melihat aktiviti di komputer riba mereka (menggunakan sistem operasi Debian) melalui skrin sistem operasi saya (Arch Linux).

Sebelum ini, saya gunakan DWService untuk memantau dari web browser saya. Selepas merajinkan diri meneroka pakej-pakej server (pelayan) VNC yang tersedia di dalam repositori rasmi Debian, berhasil jugalah melaksanakannya dengan pakej x11vnc.

Di sini, saya catatkan cara-caranya bersama maklumat paparan yang kedua-dua peranti gunakan.

Desktop Environment (DE) di dalam hos Debian: KDE Plasma
Pengurus tetingkap (Window Manager) di dalam klien Arch Linux: i3-gaps

Kedua-dua sistem bersambung di bawah rangkaian tempatan yang sama.


Di dalam hos Debian

1. Pasang pakej x11vnc.

sudo apt install x11vnc 

2. Tetapkan kata laluan.

x11vnc -storepasswd 
  • Masukkan y untuk menyimpan apabila ditanya.

3. Tambah fail konfigurasi xorg [Rujukan #1] seperti berikut:

/etc/X11/xorg.conf.d/10-vnc.conf:

Section "Module"
  Load "vnc"
EndSection

Section "Screen"
  Identifier "Screen0"
  Option "UserPasswdVerifier" "VncAuth"
  Option "PasswordFile" "/home/user/.vnc/passwd"
EndSection
  • Keluar dari DE dan log masuk semula.

4. Mulakan server.

x11vnc -display :0 -auth $(find /var/run/sddm/ -type f) -rfbauth ~/.vnc/passwd 

Di dalam klien Arch Linux

Memandangkan saya sudah terbiasa mengakses VM (Qemu/KVM) menggunakan remote-viewer sebagai viewer client (dari pakej virt-viewer), saya gunakan arahan ini sahaja untuk memperoleh paparan desktop jauh (kekurangan: kurang memuaskan dari segi persembahan kerana pemapar ini umumnya adalah untuk VM).

1. Di Terminal 1:

  • Jalankan perintah berikut yang dikenali sebagai SSH Tunnel.
ssh -t -L 5900:localhost:5900 user@ip_address 'x11vnc -localhost -display :0 -rfbauth ~/.vnc/passwd' 

Gantikan user dengan nama pengguna dan ip_address dengan alamat IP hos Debian. Sebagai contoh: anak@192.168.0.200.

2. Di Terminal 2:

  • Sambung ke port yang telah dipanjangkan melalui SSH Tunnel di atas untuk mengakses desktop jauh di hos server.
remote-viewer vnc://localhost:5900 

Contoh desktop hos Debian dari Arch Linux (tetingkap sebelah kanan).

Alternatif bagi viewer client lain pilihan saya ialah vncviewer dari pakej TigerVNC. Arahan ini mempunyai opsyen -passwd yang memudahkan proses pengesahan tanpa perlu lagi untuk memasukkan kata laluan. Salin fail kata laluan yang telah dijana di hos Debian di atas ke klien Arch Linux.

scp user@ip_address:.vnc/passwd ~/.vnc 

Pasang pakej (sekiranya belum) dengan perintah sudo pacman -S tigervnc, dan jalankan arahan berikut untuk menyambung.

vncviewer -PreferredEncoding=ZRLE -passwd ~/.vnc/passwd localhost:0 

  • Selain itu, Remmina juga tersedia di dalam repositori rasmi Arch Linux.
    Pemasangan: sudo pacman -S remmina libvcnserver


  • Apabila selesai, hentikan server di hos Debian.
x11vnc -display :0 -R stop 

  • Semak mana-mana servis VNC yang sedang berlangsung untuk dimatikan.
ps aux | grep vnc   # lihat nombor pid servis
kill <pid_no>       # untuk mematikan servis yang terlibat 


Nota tambahan untuk pelayan VNC di dalam Arch Linux.


x11vnc

1. Di dalam hos Arch Linux

  • Buat satu skrip (e.g. enable_xhost) untuk dimulakan secara auto semasa log masuk ke dalam pelayan X.
#!/usr/bin/env zsh

# to run `x11vnc` as a normal user
sudo chmod -R 755 /var/run/sddm

# https://unix.stackexchange.com/a/496877
xhost +local:   # must be run from the physical host 

  • Masukkan skrip di atas ke dalam sesi autostart melalui penetapan sistem atau tambahkannya ke dalam direktori ~/.config/autostart/enable_xhost.desktop.
[Desktop Entry]
Exec=/home/user/.scripts/enable_xhost 
Icon=application-x-shellscript
Name=enable_xhost
Type=Application
X-KDE-AutostartScript=true

  • Buka terminal dan mulakan server.
x11vnc -display :0 -auth $(find /var/run/sddm/ -type f) -rfbauth ~/.vnc/passwd 

2. Di dalam klien Arch Linux

  • Untuk akses, buka klien vncviewer melalui SSH Tunnel [Rujukan #2] dengan perintah berikut.
vncviewer -via user@ip_address -PreferredEncoding=ZRLE -Shared -passwd ~/.vnc/passwd localhost:0 

TigerVNC

x0vncserver

1. Di dalam hos Arch Linux

  • Eksport paparan (jika dijalankan dari klien melalui sambungan SSH), dan kemudian mulakan server.
export DISPLAY=:0
x0vncserver -rfbauth ~/.vnc/passwd 
...
 Main:        Listening for VNC connections on all interface(s), port 5900 
...

2. Di dalam klien Arch Linux

  • Untuk akses, jalankan vncviewer dengan perintah yang sama sebagaimana telah diringkaskan pada [Rujukan #2] di atas.
  • Remmina sebagai alternatif:-
    SSH Tunnel dari terminal: ssh -t -L 5900:localhost:5900 user@ip_address
    Remmina: Serverlocalhost:0

vncserver untuk virtual remote desktop

1. Di dalam hos Arch Linux

  • Untuk tidak mengganggu pelayan semasa X yang sedang berlangsung di dalam peranti sebenar, disarankan untuk menjalankan pelayan VNC sebagai pengguna lain.

    • Tambahkan pengguna yang berkenaan (e.g. raihan);

    • Log masuk sebagai pengguna tersebut;

    • Dan tetapkan server SSH seperti biasa agar dapat bersambung tanpa kata laluan.

  • Sunting fail /etc/tigervnc/vncserver.users.

# TigerVNC User assignment
#
# This file assigns users to specific VNC display numbers. 
# The syntax is <display>=<username>. E.g.:
#
# :2=andrew
# :3=lisa

:1=raihan

  • Menjangkakan bahawa langkah #3 iaitu menambah konfigurasi xorg sepertimana yang telah dicatatkan pada [Rujukan #1] telahpun dilakukan, tambah fail config ke dalam direktori ~/.vnc dengan perincian berikut.

~/.vnc/config (semak /usr/share/xsessions untuk entri session).

session=plasmax11
geometry=1920x1080
depth=24
localhost
alwaysshared

  • Mulakan server.
vncserver :1 
...
 vncext:      Listening for VNC connections on local interface(s), port 5901 
 ...

2. Di dalam klien Arch Linux

  • Laksanakan vncviewer melalui SSH Tunnel dengan arahan berikut.
vncviewer -via user@ip_address -PreferredEncoding=ZRLE -Shared -passwd ~/.vnc/passwd localhost:1 

  • Remmina sebagai alternatif:-
    SSH Tunnel dari terminal: ssh -t -L 5901:localhost:5901 user@ip_address
    Remmina: Serverlocalhost:1
  • Jangan lupa untuk menggantikan user kepada pengguna tambahan (i.e. raihan) di mana vncserver berlangsung.

Tip: Bagi memudahkan urusan sambungan melalui SSH, tetapkan alamat IP lokal yang dimiliki oleh sistem hos/pelayan kepada nama domain yang dikehendaki di dalam /etc/hosts kemudian, tambahkan maklumat yang berkenaan seperti (tidak terhad kepada) Host, HostName (nama domain), User dan lain-lain ke dalam fail ~/.ssh/config.

/etc/hosts:

192.168.0.201  archlinux.local 

~/.ssh/config:

Host archl
    HostName archlinux.local 
    User raihan 

Maka setelah itu, ‘user@ip_address’ boleh digantikan dengan label hos itu sahaja, yakni ‘archl’.




Kali terakhir dikemaskini:
Top