Nonaktifkan konsol lokal saat menggunakan x11vnc

Hai semuanya

Di Internet, ada banyak artikel tentang cara mengonfigurasi koneksi jarak jauh ke sesi Xorg yang ada melalui x11vnc, tetapi saya belum menemukan cara bagaimana merinci monitor dan input lokal sehingga siapa pun yang duduk di sebelah komputer jarak jauh tidak melihat apa yang Anda lakukan dan tidak menekan tombol di sesi Anda. Di bawah cat, cara saya untuk membuat x11vnc lebih seperti menghubungkan ke Windows melalui RDP.

Jadi, katakanlah Anda sudah tahu cara menggunakan x11vnc, jika tidak, Anda dapat google atau membaca misalnya di sini .

Diberikan: meluncurkan x11nvc, terhubung dengannya dengan klien, semuanya berfungsi, tetapi konsol komputer lokal juga tersedia untuk dilihat dan diinput.

Kami ingin: mengurangi konsol lokal (monitor + keyboard + mouse) sehingga tidak ada yang bisa dilihat dan dimasukkan.

Kami memotong monitor


Hal pertama yang terlintas dalam pikiran adalah hanya mematikan monitor melalui xrandr, misalnya seperti ini:

$ xrandr --output CRT1 --off 

tetapi pada saat yang sama, lingkungan jendela (saya memiliki KDE) mulai berpikir bahwa monitor benar-benar mati dan mulai melempar jendela dan panel, semuanya bergerak keluar dan menjadi sedih.
Ada cara yang lebih menarik, yaitu mengirim monitor ke mode sleep, Anda bisa melakukan ini misalnya seperti ini:

 $ xset dpms force off 

tapi di sini juga, tidak semuanya lancar. Sistem membangunkan monitor pada acara pertama. Penopang paling sederhana dalam bentuk siklus membantu:

 while : do xset dpms force off sleep .5 done 

Saya tidak berpikir lebih jauh - itu adalah kemalasan, memenuhi tujuannya - monitor tidak menunjukkan apa-apa, bahkan jika Anda menekan tombol, mengibaskan mouse, dll.

UPD:

Terima kasih amarao untuk cara lain untuk memutar ke kecerahan nol:
 $ xrandr --output CRT1 --brightness 0 


Potong input


Untuk menonaktifkan input, saya menggunakan xinput. Ketika diluncurkan tanpa parameter, ini akan menampilkan daftar perangkat:

 $ xinput ⎑ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ Logitech USB Laser Mouse id=9 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ Power Button id=6 [slave keyboard (3)] ↳ Power Button id=7 [slave keyboard (3)] ↳ Sleep Button id=8 [slave keyboard (3)] ↳ USB 2.0 Camera: HD 720P Webcam id=10 [slave keyboard (3)] ↳ HID 041e:30d3 id=11 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=12 [slave keyboard (3)] 

Perangkat inti virtual ... tidak dapat dimatikan - kesalahan dikeluarkan, tetapi sisanya dapat dihidupkan dan dimatikan, misalnya, seperti ini, Anda dapat tetap tanpa mouse selama satu menit:

 xinput disable 9; sleep 60; xinput enable 9 

Solusi turnkey


Untuk kasus saya, saya membuat skrip yang berjalan di sesi ssh. Itu menekan input lokal dan meningkatkan server x11vnc, dan setelah script selesai semuanya kembali seperti semula. Akibatnya, tiga skrip ternyata, ini dia (diperbarui).

switch_local_console:

 #!/bin/sh case $1 in 1|on) desired=1 ;; 0|off) desired=0 ;; *) echo "USAGE: $0 0|1|on|off" exit 1 ;; esac keyboards=`xinput | grep -v "XTEST" | grep "slave keyboard" | sed -re 's/^.*\sid=([0-9]+)\s.*$/\1/'` mouses=`xinput | grep -v "XTEST" | grep "slave pointer" | sed -re 's/^.*\sid=([0-9]+)\s.*$/\1/'` monitors=`xrandr | grep " connected" | sed -re 's/^(.+) connected.*$/\1/'` for device in $mouses do xinput --set-prop $device "Device Enabled" $desired done for device in $keyboards do xinput --set-prop $device "Device Enabled" $desired done for device in $monitors do xrandr --output $device --brightness $desired done 


disable_local_console:
 #!/bin/sh trap "switch_local_console 1" EXIT while : do switch_local_console 0 sleep 1 done 

Sebenarnya, skrip utama (saya punya dua monitor, saya menaikkan satu server umum dan satu untuk setiap monitor).

vnc_server:

 #!/bin/bash [[ ":0" == "$DISPLAY" ]] && echo "Should be run under ssh session" && exit 1 export DISPLAY=:0 killall x11vnc rm -r /tmp/x11vnc mkdir -p /tmp/x11vnc/{5900,5901,5902} params="-fixscreen V=5 -forever -usepw -noxkb -noxdamage -repeat -nevershared" echo "Starting VNC servers" x11vnc -rfbport 5900 $params 2>&1 | tinylog -k 2 -r /tmp/x11vnc/5900 & x11vnc -rfbport 5901 $params -clip 1920x1080+0+0 2>&1 | tinylog -k 2 -r /tmp/x11vnc/5901 & x11vnc -rfbport 5902 $params -clip 1920x1080+1920+0 2>&1 | tinylog -k 2 -r /tmp/x11vnc/5902 & echo "Waiting VNC servers" while [ `ps afx | grep -c "x11vnc -rfbport"` -ne "4" ] do sleep .5 done echo "Disabling local console" disable_local_console echo "Killing VNC servers" killall x11vnc 

Sebenarnya semuanya. Kami pergi dengan ssh, jalankan vnc_server ketika masih hidup, memiliki akses melalui vnc dan konsol lokal padam.

Terima kasih atas perhatian Anda, penambahan dan peningkatan dipersilahkan.

Source: https://habr.com/ru/post/id469885/


All Articles