Deaktiver lokal konsol, når du bruger x11vnc

Hej alle,

Der er mange artikler på internettet om emnet, hvordan man opsætter en fjernforbindelse til en eksisterende Xorg-session via x11vnc, men jeg har ikke fundet nogen steder, hvordan man undertrykker den lokale skærm og input, så enhver, der sidder ved siden af ​​fjerncomputeren, ikke kan se, hvad du laver og ikke trykke på knapper i din session. Nedenfor snittet er min metode til at gøre x11vnc mere lig at oprette forbindelse til Windows via RDP.

Så lad os sige, at du allerede ved, hvordan du bruger x11vnc, hvis ikke, kan du google eller læse f.eks. her.

Givet: vi starter x11nvc, forbinder til det med klienten, alt fungerer, men den lokale konsol på computeren er også tilgængelig til visning og input.

Vi vil have: sluk for den lokale konsol (skærm + tastatur + mus), så intet kan ses eller indtastes.

Sluk for skærme

Det første, der kom til at tænke på, var simpelthen at slukke for skærmen via xrandr, for eksempel sådan her:

$ xrandr --output CRT1 --off

men på samme tid begynder vinduesmiljøet (jeg har KDE) at tro at skærmen virkelig er slukket og begynder at kaste vinduer og paneler, alt flytter ud og bliver trist.
Der er en mere interessant måde, som er at sende skærmen i dvale, du kan for eksempel gøre dette på denne måde:

$ xset dpms force off

men heller ikke her er alt glat. Systemet vækker monitoren ved den første begivenhed. Den enkleste krykke i form af en cyklus hjælper:

while :
do
    xset dpms force off
    sleep .5
done

Jeg tænkte ikke videre - jeg var doven, det tjener sit formål - skærmene viser ikke noget, selvom jeg trykker på knapperne, flytter musen osv.

UPS:

Tak amarao for en anden metode med at skrue lysstyrken til nul:

$ xrandr --output CRT1 --brightness 0

Udskæring af input

For at deaktivere input brugte jeg xinput. Når den startes uden parametre, viser den en liste over enheder:

$ 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)]

Enheder Virtuel kerne... du kan ikke deaktivere det - en fejl vises, men resten kan tændes og slukkes, for eksempel, sådan kan du stå uden mus i et minut:

xinput disable 9; sleep 60; xinput enable 9

Færdiglavet opløsning

Til mit tilfælde lavede jeg et script, som jeg kører i en ssh-session. Det undertrykker lokalt input og hæver x11vnc-serveren, og efter fuldførelse af scriptet vender alt tilbage, som det var. Som et resultat fik vi tre scripts, her er de (opdateret).

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

Faktisk er hovedscriptet (jeg har to skærme, jeg sætter en fælles server op og en til hver skærm).

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

Det er alt. Log ind via ssh og start vnc_server, mens han er i live, har vi adgang via vnc, og den lokale konsol er slukket.

Tak for din opmærksomhed, tilføjelser og forbedringer er velkomne.

Kilde: www.habr.com

Tilføj en kommentar