x11vnc рд╡рд╛рдкрд░рддрд╛рдирд╛ рд╕реНрдерд╛рдирд┐рдХ рдХрдиреНрд╕реЛрд▓ рдЕрдХреНрд╖рдо рдХрд░рд╛

рд╕рд░реНрд╡рд╛рдВрдирд╛ рдирдорд╕реНрдХрд╛рд░,

x11vnc рджреНрд╡рд╛рд░реЗ рд╡рд┐рджреНрдпрдорд╛рди Xorg рд╕рддреНрд░рд╛рдордзреНрдпреЗ рд░рд┐рдореЛрдЯ рдХрдиреЗрдХреНрд╢рди рдХрд╕реЗ рд╕реЗрдЯ рдХрд░рд╛рд╡реЗ рдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░ рдЗрдВрдЯрд░рдиреЗрдЯрд╡рд░ рдмрд░реЗрдЪ рд▓реЗрдЦ рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рдорд▓рд╛ рдХреБрдареЗрд╣реА рдЖрдврд│рд▓реЗ рдирд╛рд╣реА рдХреА рд╕реНрдерд╛рдирд┐рдХ рдореЙрдирд┐рдЯрд░ рдЖрдгрд┐ рдЗрдирдкреБрдЯ рдХрд╕реЗ рджрд╛рдмрд╛рд╡реЗ рдЬреЗрдгреЗрдХрд░реВрди рд░рд┐рдореЛрдЯ рд╕рдВрдЧрдгрдХрд╛рдЪреНрдпрд╛ рд╢реЗрдЬрд╛рд░реА рдмрд╕рд▓реЗрд▓рд╛ рдХреЛрдгреАрд╣реА рдХрд░реВ рд╢рдХреЗрд▓. рддреБрдореНрд╣реА рдХрд╛рдп рдХрд░рдд рдЖрд╣рд╛рдд рддреЗ рдкрд╛рд╣реВ рдирдХрд╛ рдЖрдгрд┐ рддреБрдордЪреНрдпрд╛ рд╕рддреНрд░рд╛рдд рдмрдЯрдгреЗ рджрд╛рдмрдд рдирд╛рд╣реАрдд. X11vnc рд╣реА RDP рджреНрд╡рд╛рд░реЗ рд╡рд┐рдВрдбреЛрдЬрд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рд░рдЦреАрдЪ рдмрдирд╡рдгреНрдпрд╛рдЪреА рдорд╛рдЭреА рдкрджреНрдзрдд рдХрдЯ рдЦрд╛рд▓реА рдЖрд╣реЗ.

рддрд░, рд╕рдордЬрд╛ рддреБрдореНрд╣рд╛рд▓рд╛ x11vnc рдХрд╕реЗ рд╡рд╛рдкрд░рд╛рдпрдЪреЗ рд╣реЗ рдЖрдзреАрдЪ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ, рдЬрд░ рдирд╕реЗрд▓ рддрд░ рддреБрдореНрд╣реА рдЧреБрдЧрд▓ рдХрд░реВ рд╢рдХрддрд╛ рдХрд┐рдВрд╡рд╛ рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде рд╡рд╛рдЪреВ рд╢рдХрддрд╛ рдпреЗрдереЗ.

рджрд┐рд▓реЗрдГ рдЖрдореНрд╣реА x11nvc рд▓рд╛рдБрдЪ рдХрд░рддреЛ, рддреНрдпрд╛рд╕ рдХреНрд▓рд╛рдпрдВрдЯрд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рддреЛ, рд╕рд░реНрд╡рдХрд╛рд╣реА рдХрд╛рд░реНрдп рдХрд░рддреЗ, рдкрд░рдВрддреБ рд╕рдВрдЧрдгрдХрд╛рдЪреЗ рд╕реНрдерд╛рдирд┐рдХ рдХрдиреНрд╕реЛрд▓ рджреЗрдЦреАрд▓ рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдЗрдирдкреБрдЯрд╕рд╛рдареА рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ.

рдЖрдореНрд╣рд╛рд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ: рд╕реНрдерд╛рдирд┐рдХ рдХрдиреНрд╕реЛрд▓ (рдореЙрдирд┐рдЯрд░ + рдХреАрдмреЛрд░реНрдб + рдорд╛рдЙрд╕) рдмрдВрдж рдХрд░рд╛ рдЬреЗрдгреЗрдХрд░реВрди рдХрд╛рд╣реАрд╣реА рджрд┐рд╕реВ рдХрд┐рдВрд╡рд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА.

рдореЙрдирд┐рдЯрд░реНрд╕ рдмрдВрдж рдХрд░рдд рдЖрд╣реЗ

рдкрд╣рд┐рд▓реА рдЧреЛрд╖реНрдЯ рдЬреА рдордирд╛рдд рдЖрд▓реА рддреА рдореНрд╣рдгрдЬреЗ рдлрдХреНрдд xrandr рджреНрд╡рд╛рд░реЗ рдореЙрдирд┐рдЯрд░ рдмрдВрдж рдХрд░рдгреЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде рдпрд╛рд╕рд╛рд░рдЦреЗ:

$ xrandr --output CRT1 --off

рдкрд░рдВрддреБ рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рд╡рд┐рдВрдбреЛрд┐рдВрдЧ рд╡рд╛рддрд╛рд╡рд░рдг (рдорд╛рдЭреНрдпрд╛рдХрдбреЗ рдХреЗрдбреАрдИ рдЖрд╣реЗ) рдЕрд╕реЗ рд╡рд╛рдЯреВ рд▓рд╛рдЧрддреЗ рдХреА рдореЙрдирд┐рдЯрд░ рдЦрд░реЛрдЦрд░рдЪ рдмрдВрдж рдЖрд╣реЗ рдЖрдгрд┐ рдЦрд┐рдбрдХреНрдпрд╛ рдЖрдгрд┐ рдкреЕрдиреЗрд▓ рдлреЗрдХрдгреЗ рд╕реБрд░реВ рдХрд░рддреЛ, рд╕рд░реНрд╡рдХрд╛рд╣реА рдмрд╛рд╣реЗрд░ рд╣рд▓рддреЗ рдЖрдгрд┐ рджреБрдГрдЦреА рд╣реЛрддреЗ.
рдореЙрдирд┐рдЯрд░рд▓рд╛ рд╣рд╛рдпрдмрд░рдиреЗрд╢рдирдордзреНрдпреЗ рдкрд╛рдард╡рдгреНрдпрд╛рдЪрд╛ рдЖрдгрдЦреА рдПрдХ рдордиреЛрд░рдВрдЬрдХ рдорд╛рд░реНрдЧ рдЖрд╣реЗ, рдЖрдкрдг рд╣реЗ рдХрд░реВ рд╢рдХрддрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде:

$ xset dpms force off

рдкрдг рдЗрдереЗрд╣реА рд╕рд░реНрд╡ рдХрд╛рд╣реА рд╕реБрд░рд│реАрдд рдирд╛рд╣реА. рдкрд╣рд┐рд▓реНрдпрд╛ рдЗрд╡реНрд╣реЗрдВрдЯрдордзреНрдпреЗ рд╕рд┐рд╕реНрдЯрдо рдореЙрдирд┐рдЯрд░рд▓рд╛ рдЬрд╛рдЧреГрдд рдХрд░рддреЗ. рд╕рд╛рдпрдХрд▓рдЪреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкреА рдХреНрд░реЕрдЪ рдорджрдд рдХрд░рддреЗ:

while :
do
    xset dpms force off
    sleep .5
done

рдореА рдкреБрдвреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗрд▓рд╛ рдирд╛рд╣реА - рдореА рдЖрд│рд╢реА рд╣реЛрддреЛ, рддреЛ рддреНрдпрд╛рдЪрд╛ рдЙрджреНрджреЗрд╢ рдкреВрд░реНрдг рдХрд░рддреЛ - рдореЙрдирд┐рдЯрд░ рдХрд╛рд╣реАрд╣реА рджрд░реНрд╢рд╡рдд рдирд╛рд╣реАрдд, рдЬрд░реА рдореА рдмрдЯрдгреЗ рджрд╛рдмрд▓реА, рдорд╛рдКрд╕ рд╣рд▓рд╡рд╛ рдЗ.

рдпреВрдкреАрдПрд╕:

╨б╨┐╨░╤Б╨╕╨▒╨╛ рдЕрдорд░рд╛рд╡ рдмреНрд░рд╛рдЗрдЯрдиреЗрд╕ рд╢реВрдиреНрдпрд╛рд╡рд░ рдмрджрд▓рдгреНрдпрд╛рдЪреНрдпрд╛ рджреБрд╕рд▒реНрдпрд╛ рдкрджреНрдзрддреАрд╕рд╛рдареА:

$ 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛