Çaktivizoni tastierën lokale kur përdorni x11vnc

Përshëndetje,

Ka shumë artikuj në internet mbi temën se si të konfiguroni një lidhje në distancë me një sesion ekzistues Xorg përmes x11vnc, por nuk kam gjetur askund se si të shtypni monitorin lokal dhe hyrjen në mënyrë që kushdo që ulet pranë kompjuterit në distancë të bëjë nuk shikon se çfarë po bën dhe nuk shtyp butonat në seancën tënde. Më poshtë prerjes është metoda ime për ta bërë x11vnc më të ngjashëm me lidhjen me Windows përmes RDP.

Pra, le të themi se ju tashmë dini se si të përdorni x11vnc, nëse jo, mund të kërkoni në google ose të lexoni për shembull këtu.

duke pasur parasysh: ne lëshojmë x11nvc, lidhemi me të me klientin, gjithçka funksionon, por tastiera lokale e kompjuterit është gjithashtu e disponueshme për shikim dhe hyrje.

Ne duam: fikni konsolën lokale (monitor + tastierë + miun) në mënyrë që asgjë të mos shihet ose të futet.

Fikja e monitorëve

Gjëja e parë që më erdhi në mendje ishte thjesht të fikni monitorin përmes xrandr, për shembull si kjo:

$ xrandr --output CRT1 --off

por në të njëjtën kohë, mjedisi i dritareve (kam KDE) fillon të mendojë se monitori është fikur vërtet dhe fillon të hedhë dritare dhe panele, gjithçka largohet dhe bëhet e trishtuar.
Ekziston një mënyrë më interesante, e cila është dërgimi i monitorit në letargji, ju mund ta bëni këtë për shembull si kjo:

$ xset dpms force off

por edhe këtu jo gjithçka është e qetë. Sistemi zgjon monitorin në ngjarjen e parë. Paterica më e thjeshtë në formën e një cikli ndihmon:

while :
do
    xset dpms force off
    sleep .5
done

Nuk mendova më tej - isha dembel, i shërben qëllimit të saj - monitorët nuk tregojnë asgjë, edhe nëse shtyp butonat, lëviz miun, etj.

UPD:

Falënderim amarao për një metodë tjetër me kthimin e shkëlqimit në zero:

$ xrandr --output CRT1 --brightness 0

Prerja e hyrjes

Për të çaktivizuar hyrjen kam përdorur xinput. Kur niset pa parametra, ai shfaq një listë të pajisjeve:

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

Pajisjet Bërthama virtuale... nuk mund ta çaktivizoni - shfaqet një gabim, por pjesa tjetër mund të ndizet dhe fiket, për shembull, kështu mund të mbeteni pa miun për një minutë:

xinput disable 9; sleep 60; xinput enable 9

Zgjidhje e gatshme

Për rastin tim, bëra një skript që e ekzekutoj në një seancë ssh. Ai shtyp hyrjen lokale dhe ngre serverin x11vnc, dhe pas përfundimit të skriptit gjithçka kthehet siç ishte. Si rezultat, ne morëm tre skripta, këtu janë ato (të përditësuara).

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

Në fakt, skenari kryesor (kam dy monitorë, kam vendosur një server të përbashkët dhe një për çdo 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

Kjo eshte e gjitha. Hyni përmes ssh dhe nisni vnc_server, sa eshte gjalle kemi akses nepermjet vnc dhe konsola lokale eshte fikur.

Faleminderit për vëmendjen tuaj, shtesat dhe përmirësimet janë të mirëseardhura.

Burimi: www.habr.com

Shto një koment