Halo,
Ana akeh artikel ing Internet babagan topik carane nyiyapake sambungan remot menyang sesi Xorg sing ana liwat x11vnc, nanging aku ora nemokake ing ngendi wae carane nyuda monitor lan input lokal supaya sapa wae sing lungguh ing jejere komputer remot. ora weruh apa sing sampeyan lakoni lan ora menet tombol ing sesi sampeyan. Ing ngisor iki potong minangka cara kanggo nggawe x11vnc luwih mirip karo nyambungake menyang Windows liwat RDP.
Dadi, yen sampeyan wis ngerti carane nggunakake x11vnc, yen ora, sampeyan bisa google utawa maca contone.
Given: kita miwiti x11nvc, nyambung karo klien, kabeh bisa, nanging console lokal komputer uga kasedhiya kanggo ndeleng lan input.
Kita pengin: mateni konsol lokal (monitor + keyboard + mouse) supaya ora ana sing katon utawa mlebu.
Mateni monitor
Bab pisanan sing dipikirake yaiku mateni monitor liwat xrandr, contone kaya iki:
$ xrandr --output CRT1 --off
nanging ing wektu sing padha, lingkungan windowing (Aku duwe KDE) wiwit mikir sing monitor tenan dipateni lan wiwit uncalan windows lan panel, kabeh gerakane metu lan dadi sedih.
Ana cara sing luwih menarik, yaiku ngirim monitor menyang hibernasi, sampeyan bisa nindakake kaya iki:
$ xset dpms force off
nanging kene, banget, ora kabeh Gamelan. Sistem tangi monitor ing acara pisanan. Kruk sing paling gampang ing wangun siklus mbantu:
while :
do
xset dpms force off
sleep .5
done
Aku ora mikir maneh - aku kesed, iku serves kanggo tujuane - monitor ora nuduhake apa-apa, sanajan aku mencet tombol, mindhah mouse, etc.
UPD:
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ
$ xrandr --output CRT1 --brightness 0
Ngilangi input
Kanggo mateni input aku digunakake xinput. Nalika diluncurake tanpa paramèter, bakal nampilake dhaptar piranti:
$ 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)]
Piranti Inti virtual... sampeyan ora bisa mateni - kesalahan ditampilake, nanging liyane bisa diuripake lan mateni, contone, iki carane sampeyan bisa ngiwa tanpa mouse sak menit:
xinput disable 9; sleep 60; xinput enable 9
Solusi siap
Kanggo kasusku, aku nggawe skrip sing ditindakake ing sesi ssh. Iku suppresses input lokal lan mundhakaken server x11vnc, lan marang completion saka script kabeh bali kaya. AkibatΓ©, kita entuk telung skrip, ing kene (dianyari).
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
Bener, script utama (Aku duwe loro monitor, aku nyiyapake siji server umum lan siji kanggo saben 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
Mekaten. Mlebet liwat ssh lan miwiti vnc_server, nalika isih urip, kita duwe akses liwat vnc lan console lokal dipateni.
Matur nuwun kanggo kawigatosan, tambahan lan dandan olèh.
Source: www.habr.com