Halo semua,
Ada banyak artikel di Internet tentang cara mengatur koneksi jarak jauh ke sesi Xorg yang ada melalui x11vnc, tetapi saya belum menemukan cara untuk menekan monitor dan input lokal sehingga siapa pun yang duduk di sebelah komputer jarak jauh dapat melakukannya. tidak melihat apa yang Anda lakukan dan tidak menekan tombol di sesi Anda. Di bawah ini adalah metode saya untuk membuat x11vnc lebih mirip dengan menghubungkan ke Windows melalui RDP.
Jadi misalkan anda sudah tahu cara menggunakan x11vnc, jika belum bisa googling atau baca misalnya
Diberikan: kami meluncurkan x11nvc, menyambungkannya dengan klien, semuanya berfungsi, tetapi konsol lokal komputer juga tersedia untuk dilihat dan dimasukkan.
Kami ingin: matikan konsol lokal (monitor + keyboard + mouse) agar tidak ada yang terlihat atau masuk.
Mematikan monitor
Hal pertama yang terlintas di benak saya adalah mematikan monitor lewat xrandr, contohnya seperti ini:
$ xrandr --output CRT1 --off
tetapi pada saat yang sama, lingkungan windowing (saya punya KDE) mulai berpikir bahwa monitor benar-benar dimatikan dan mulai membuang jendela dan panel, semuanya bergerak keluar dan menjadi sedih.
Ada cara yang lebih menarik yaitu dengan memasukkan monitor ke mode hibernasi, misalnya bisa seperti ini:
$ xset dpms force off
tapi di sini juga, tidak semuanya mulus. Sistem membangunkan monitor pada kejadian pertama. Kruk paling sederhana dalam bentuk siklus membantu:
while :
do
xset dpms force off
sleep .5
done
Saya tidak berpikir lebih jauh - saya malas, itu sesuai dengan tujuannya - monitor tidak menampilkan apa pun, bahkan jika saya menekan tombol, menggerakkan mouse, dll.
UPD:
Terima kasih
$ xrandr --output CRT1 --brightness 0
Memotong masukan
Untuk menonaktifkan input saya menggunakan xinput. Saat 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 maya... Anda tidak dapat menonaktifkannya - kesalahan ditampilkan, tetapi sisanya dapat diaktifkan dan dinonaktifkan, misalnya, beginilah cara Anda dibiarkan tanpa mouse selama satu menit:
xinput disable 9; sleep 60; xinput enable 9
Solusi turnkey
Untuk kasus saya, saya membuat skrip yang saya jalankan dalam sesi ssh. Ini menekan input lokal dan meningkatkan server x11vnc, dan setelah skrip selesai semuanya kembali seperti semula. Hasilnya, kami mendapat tiga skrip, 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
nonaktifkan_konsol_lokal:
#!/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 menyiapkan 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
Itu saja. Masuk melalui ssh dan luncurkan vnc_server, selagi dia masih hidup, kami memiliki akses melalui vnc dan konsol lokal padam.
Terima kasih atas perhatiannya, penambahan dan perbaikan dipersilakan.
Sumber: www.habr.com