Išjunkite vietinę konsolę, kai naudojate x11vnc

Sveiki,

Internete yra daug straipsnių apie tai, kaip nustatyti nuotolinį ryšį su esama Xorg sesija per x11vnc, bet niekur neradau, kaip nuslopinti vietinį monitorių ir įvestį, kad kas nors, sėdintis šalia nuotolinio kompiuterio, tai padarytų. nemato, ką darote, ir seanso metu nespaudė mygtukų. Žemiau yra mano metodas, kaip padaryti x11vnc panašesnį į prisijungimą prie Windows per KPP.

Taigi, tarkime, jūs jau žinote, kaip naudoti x11vnc, jei ne, galite paieškoti google arba skaityti pvz. čia.

Dano: paleidžiame x11nvc, jungiamės prie jo su klientu, viskas veikia, bet galima peržiūrėti ir įvesti vietinę kompiuterio konsolę.

Mes norime: išjunkite vietinę konsolę (monitorius + klaviatūra + pelė), kad nieko nebūtų matyti ar įvesti.

Monitorių išjungimas

Pirmas dalykas, kuris atėjo į galvą, buvo tiesiog išjungti monitorių per xrandr, pavyzdžiui, taip:

$ xrandr --output CRT1 --off

bet tuo pačiu metu langų aplinka (turiu KDE) pradeda galvoti, kad monitorius tikrai išjungtas ir pradeda mėtyti langus ir paneles, viskas išjuda ir darosi liūdna.
Yra įdomesnis būdas, ty nusiųsti monitorių į užmigdymo režimą, tai galite padaryti, pavyzdžiui, taip:

$ xset dpms force off

bet ir čia ne viskas sklandu. Sistema pažadina monitorių pirmą kartą. Paprasčiausias ramentas ciklo pavidalu padeda:

while :
do
    xset dpms force off
    sleep .5
done

Toliau negalvojau - tingėjau, tai atlieka savo paskirtį - monitoriai nieko nerodo, net jei paspaudžiu mygtukus, judinu pelę ir pan.

UPD:

Ačiū amarao kitam metodui, kai ryškumas pakeičiamas iki nulio:

$ xrandr --output CRT1 --brightness 0

Įvesties iškirpimas

Norėdami išjungti įvestį, naudojau xinput. Paleidus be parametrų, rodomas įrenginių sąrašas:

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

Prietaisai Virtualus branduolys... negalite jo išjungti - rodoma klaida, tačiau likusią dalį galima įjungti ir išjungti, pavyzdžiui, taip galite minutę likti be pelės:

xinput disable 9; sleep 60; xinput enable 9

Visiškai išspręsta problema

Savo atveju sukūriau scenarijų, kurį paleidžiu ssh seanso metu. Jis slopina vietinę įvestį ir pakelia x11vnc serverį, o užbaigus scenarijų viskas grįžta kaip buvę. Dėl to mes gavome tris scenarijus, štai jie (atnaujinti).

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

Tiesą sakant, pagrindinis scenarijus (turiu du monitorius, nustatau vieną bendrą serverį ir po vieną kiekvienam monitoriui).

vnc_serveris:

#!/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

Tai viskas. Prisijunkite per ssh ir paleiskite vnc_serveris, kol jis gyvas, turime prieigą per vnc ir vietinė konsolė užgesinta.

Dėkojame už dėmesį, laukiami papildymai ir patobulinimai.

Šaltinis: www.habr.com

Добавить комментарий