Hei kaikille,
Internetissä on monia artikkeleita siitä, miten luodaan etäyhteys olemassa olevaan Xorg-istuntoon x11vnc:n kautta, mutta en ole löytänyt mistään, kuinka paikallisen näytön ja syötteen tukahduttaminen niin, että kuka tahansa etätietokoneen vieressä istuva tekee sen. ei näe mitä olet tekemässä eikä paina painikkeita istunnon aikana. Leikkauksen alla on menetelmäni tehdä x11vnc:stä enemmän samanlainen kuin yhteyden muodostaminen Windowsiin RDP:n kautta.
Oletetaan siis, että osaat jo käyttää x11vnc:tä, jos et, voit googlettaa tai lukea esim.
ilmoittautua: käynnistämme x11nvc:n, yhdistämme siihen asiakkaan kanssa, kaikki toimii, mutta tietokoneen paikallinen konsoli on myös katseltavissa ja syötettävissä.
Me haluamme: sammuta paikallinen konsoli (näyttö + näppäimistö + hiiri), jotta mitään ei näy tai syötetä.
Monitorien sammuttaminen
Ensimmäinen asia, joka tuli mieleen, oli yksinkertaisesti sammuttaa näyttö xrandrin kautta, esimerkiksi näin:
$ xrandr --output CRT1 --off
mutta samaan aikaan ikkunointiympäristö (minulla on KDE) alkaa ajatella, että näyttö on todella sammutettu ja alkaa heitellä ikkunoita ja paneeleja, kaikki liikkuu pois ja tulee surulliseksi.
On olemassa mielenkiintoisempi tapa, joka on lähettää näyttö horrostilaan, voit tehdä tämän esimerkiksi näin:
$ xset dpms force off
mutta täälläkään kaikki ei ole sujuvaa. Järjestelmä herättää näytön ensimmäisessä tapahtumassa. Yksinkertaisin kainalosauva pyörän muodossa auttaa:
while :
do
xset dpms force off
sleep .5
done
En ajatellut enempää - olin laiska, se palvelee tarkoitustaan - näytöt eivät näytä mitään, vaikka painan painikkeita, liikutan hiirtä jne.
UPD:
Kiitos
$ xrandr --output CRT1 --brightness 0
Sisääntulon leikkaaminen
Syötteen poistamiseksi käytöstä käytin xinputia. Kun se käynnistetään ilman parametreja, se näyttää luettelon laitteista:
$ 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)]
Laitteet Virtuaalinen ydin... et voi poistaa sitä käytöstä - näyttöön tulee virhe, mutta loput voidaan kytkeä päälle ja pois, esimerkiksi näin voit jättää minut ilman hiirtä:
xinput disable 9; sleep 60; xinput enable 9
Valmis ratkaisu
Omaa tapausta varten tein skriptin, jonka suoritan ssh-istunnossa. Se vaimentaa paikallisen syötteen ja nostaa x11vnc-palvelimen, ja komentosarjan valmistuttua kaikki palautuu entisellään. Tuloksena saimme kolme skriptiä, tässä ne ovat (päivitetty).
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
Itse asiassa pääskripti (minulla on kaksi näyttöä, asensin yhden yhteisen palvelimen ja yhden kullekin näytölle).
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
Siinä kaikki. Kirjaudu ssh:n kautta ja käynnistä vnc_palvelin, kun hän on elossa, meillä on pääsy vnc:n kautta ja paikallinen konsoli on sammunut.
Kiitos huomiosta, lisäykset ja parannukset ovat tervetulleita.
Lähde: will.com