ื”ืฉื‘ืช ืืช ื”ืžืกื•ืฃ ื”ืžืงื•ืžื™ ื‘ืขืช ืฉื™ืžื•ืฉ ื‘-x11vnc

ืฉืœื•ื ืœื›ื•ืœื,

ื™ืฉ ื”ืจื‘ื” ืžืืžืจื™ื ื‘ืื™ื ื˜ืจื ื˜ ื‘ื ื•ืฉื ืื™ืš ืœื”ื’ื“ื™ืจ ื—ื™ื‘ื•ืจ ืžืจื—ื•ืง ืœืกืฉืŸ Xorg ืงื™ื™ื ื“ืจืš x11vnc, ืื‘ืœ ืœื ืžืฆืืชื™ ื‘ืฉื•ื ืžืงื•ื ืื™ืš ืœื“ื›ื ืืช ื”ืฆื’ ื”ืžืงื•ืžื™ ื•ื”ืงืœื˜ ื›ืš ืฉื›ืœ ืžื™ ืฉื™ื•ืฉื‘ ืœื™ื“ ื”ืžื—ืฉื‘ ื”ืžืจื•ื—ืง ื™ืขืฉื” ื–ืืช. ืœื ืจื•ืื” ืžื” ืืชื” ืขื•ืฉื” ื•ืœื ืœื•ื—ืฅ ืขืœ ื›ืคืชื•ืจื™ื ื‘ืžื”ืœืš ื”ืคื’ื™ืฉื” ืฉืœืš. ืžืชื—ืช ืœื—ื™ืชื•ืš ื”ืฉื™ื˜ื” ืฉืœื™ ืœื”ืคื•ืš ืืช x11vnc ืœื“ื•ืžื” ื™ื•ืชืจ ืœื—ื™ื‘ื•ืจ ืœ-Windows ื“ืจืš RDP.

ืื–, ื ื ื™ื— ืฉืืชื” ื›ื‘ืจ ื™ื•ื“ืข ืื™ืš ืœื”ืฉืชืžืฉ ื‘-x11vnc, ืื ืœื, ืืชื” ื™ื›ื•ืœ ืœื—ืคืฉ ื‘ื’ื•ื’ืœ ืื• ืœืงืจื•ื ืœืžืฉืœ ื›ืืŸ.

ื‘ื”ืชื—ืฉื‘ you ืื ื—ื ื• ืžืฉื™ืงื™ื ืืช x11nvc, ืžืชื—ื‘ืจื™ื ืืœื™ื• ืขื ื”ืœืงื•ื—, ื”ื›ืœ ืขื•ื‘ื“, ืื‘ืœ ื”ืงื•ื ืกื•ืœื” ื”ืžืงื•ืžื™ืช ืฉืœ ื”ืžื—ืฉื‘ ื–ืžื™ื ื” ื’ื ืœืฆืคื™ื™ื” ื•ืงืœื˜.

ืื ื—ื ื• ืจื•ืฆื™ื: ื›ื‘ื” ืืช ื”ืงื•ื ืกื•ืœื” ื”ืžืงื•ืžื™ืช (ืฆื’ + ืžืงืœื“ืช + ืขื›ื‘ืจ) ื›ืš ืฉืœื ื ื™ืชืŸ ื™ื”ื™ื” ืœืจืื•ืช ืื• ืœื”ื™ื›ื ืก ืœืฉื•ื ื“ื‘ืจ.

ื›ื™ื‘ื•ื™ ื”ืžืกื›ื™ื

ื”ื“ื‘ืจ ื”ืจืืฉื•ืŸ ืฉืขืœื” ืœื™ ื‘ืจืืฉ ื”ื™ื” ืคืฉื•ื˜ ืœื›ื‘ื•ืช ืืช ื”ืฆื’ ื‘ืืžืฆืขื•ืช xrandr, ืœืžืฉืœ ื›ืš:

$ xrandr --output CRT1 --off

ืื‘ืœ ื‘ืžืงื‘ื™ืœ, ืกื‘ื™ื‘ืช ื”ื—ืœื•ื ื•ืช (ื™ืฉ ืœื™ KDE) ืžืชื—ื™ืœื” ืœื—ืฉื•ื‘ ืฉื”ืžืกืš ื‘ืืžืช ื›ื‘ื•ื™ ื•ืžืชื—ื™ืœ ืœื–ืจื•ืง ื—ืœื•ื ื•ืช ื•ืคืื ืœื™ื, ื”ื›ืœ ื–ื– ื”ื—ื•ืฆื” ื•ื ื”ื™ื” ืขืฆื•ื‘.
ื™ืฉ ื“ืจืš ืžืขื ื™ื™ื ืช ื™ื•ืชืจ, ืฉื”ื™ื ืœืฉืœื•ื— ืืช ื”ืžื•ื ื™ื˜ื•ืจ ืœืžืฆื‘ ืฉื™ื ื”, ืืชื” ื™ื›ื•ืœ ืœืขืฉื•ืช ื–ืืช ืœืžืฉืœ ื›ืš:

$ xset dpms force off

ืื‘ืœ ื’ื ื›ืืŸ ืœื ื”ื›ืœ ื—ืœืง. ื”ืžืขืจื›ืช ืžืขื™ืจื” ืืช ื”ืžื•ื ื™ื˜ื•ืจ ื‘ืื™ืจื•ืข ื”ืจืืฉื•ืŸ. ื”ืงื‘ ื”ืคืฉื•ื˜ ื‘ื™ื•ืชืจ ื‘ืฆื•ืจืช ืžื—ื–ื•ืจ ืขื•ื–ืจ:

while :
do
    xset dpms force off
    sleep .5
done

ืœื ื—ืฉื‘ืชื™ ื™ื•ืชืจ - ื”ืชืขืฆืœืชื™, ื–ื” ืžืฉืจืช ืืช ืžื˜ืจืชื• - ื”ืžืกื›ื™ื ืœื ืžืจืื™ื ื›ืœื•ื, ื’ื ืื ืื ื™ ืœื•ื—ืฅ ืขืœ ื”ื›ืคืชื•ืจื™ื, ืžื–ื™ื– ืืช ื”ืขื›ื‘ืจ ื•ื›ื•'.

UPD:

ืชื•ื“ื” amarao ืœืฉื™ื˜ื” ืื—ืจืช ืขื ื”ืคื™ื›ืช ื”ื‘ื”ื™ืจื•ืช ืœืืคืก:

$ xrandr --output CRT1 --brightness 0

ื—ื•ืชืš ืืช ื”ืงืœื˜

ื›ื“ื™ ืœื‘ื˜ืœ ืงืœื˜ ื”ืฉืชืžืฉืชื™ ื‘-xinput. ื›ืืฉืจ ื”ื•ื ืžื•ืคืขืœ ืœืœื ืคืจืžื˜ืจื™ื, ื”ื•ื ืžืฆื™ื’ ืจืฉื™ืžื” ืฉืœ ืžื›ืฉื™ืจื™ื:

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

ืžื›ืฉื™ืจื™ื ืœื™ื‘ื” ื•ื™ืจื˜ื•ืืœื™ืช... ืืชื” ืœื ื™ื›ื•ืœ ืœื”ืฉื‘ื™ืช ืืช ื–ื” - ืžื•ืฆื’ืช ืฉื’ื™ืื”, ืื‘ืœ ืืช ื”ืฉืืจ ื ื™ืชืŸ ืœื”ืคืขื™ืœ ื•ืœื›ื‘ื•ืช, ืœื“ื•ื’ืžื”, ื›ืš ืชื•ื›ืœ ืœื”ื™ืฉืืจ ืœืœื ืขื›ื‘ืจ ืœืžืฉืš ื“ืงื”:

xinput disable 9; sleep 60; xinput enable 9

ืคืชืจื•ืŸ ืคืฉื•ื˜

ื‘ืžืงืจื” ืฉืœื™, ื”ื›ื ืชื™ ืกืงืจื™ืคื˜ ืฉืื ื™ ืžืจื™ืฅ ื‘ืกืฉืŸ ssh. ื–ื” ืžื“ื›ื ืงืœื˜ ืžืงื•ืžื™ ื•ืžืขืœื” ืืช ืฉืจืช x11vnc, ื•ืขื ื”ืฉืœืžืช ื”ืกืงืจื™ืคื˜ ื”ื›ืœ ื—ื•ื–ืจ ื›ืคื™ ืฉื”ื™ื”. ื›ืชื•ืฆืื” ืžื›ืš, ืงื™ื‘ืœื ื• ืฉืœื•ืฉื” ืกืงืจื™ืคื˜ื™ื, ื”ื ื” ื”ื (ืžืขื•ื“ื›ื ื™ื).

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

ืœืžืขืฉื”, ื”ืกืงืจื™ืคื˜ ื”ืจืืฉื™ (ื™ืฉ ืœื™ ืฉื ื™ ืžืกื›ื™ื, ื”ื’ื“ืจืชื™ ืฉืจืช ืื—ื“ ืžืฉื•ืชืฃ ื•ืื—ื“ ืœื›ืœ ืฆื’).

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

ื–ื” ื”ื›ืœ. ื”ืชื—ื‘ืจ ื‘ืืžืฆืขื•ืช ssh ื•ื”ืคืขืœ vnc_server, ื‘ืขื•ื“ื• ื‘ื—ื™ื™ื, ื™ืฉ ืœื ื• ื’ื™ืฉื” ื“ืจืš vnc ื•ื”ืงื•ื ืกื•ืœื” ื”ืžืงื•ืžื™ืช ื›ื‘ื•ื™ื”.

ืชื•ื“ื” ืขืœ ืชืฉื•ืžืช ื”ืœื‘, ืชื•ืกืคื•ืช ื•ืฉื™ืคื•ืจื™ื ื™ืชืงื‘ืœื• ื‘ื‘ืจื›ื”.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”