x11vnc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕реНрдерд╛рдиреАрдп рдХрдВрд╕реЛрд▓ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░реЗрдВ

рдирдорд╕реНрддреЗ,

x11vnc рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореМрдЬреВрджрд╛ Xorg рд╕рддреНрд░ рдХреЗ рд▓рд┐рдП рд░рд┐рдореЛрдЯ рдХрдиреЗрдХреНрд╢рди рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХрдИ рд▓реЗрдЦ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХрд╣реАрдВ рднреА рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдХрд┐ рд╕реНрдерд╛рдиреАрдп рдореЙрдирд┐рдЯрд░ рдФрд░ рдЗрдирдкреБрдЯ рдХреЛ рдХреИрд╕реЗ рджрдмрд╛рдпрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ рд░рд┐рдореЛрдЯ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдмреИрдард╛ рдХреЛрдИ рднреА рдРрд╕рд╛ рдХрд░ рд╕рдХреЗред рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рд╕рддреНрд░ рдореЗрдВ рдмрдЯрди рдирд╣реАрдВ рджрдмрд╛рддрд╛ред рдХрдЯ рдХреЗ рдиреАрдЪреЗ x11vnc рдХреЛ RDP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдВрдбреЛрдЬрд╝ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рдмрдирд╛рдиреЗ рдХреА рдореЗрд░реА рд╡рд┐рдзрд┐ рд╣реИред

рддреЛ, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ x11vnc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Google рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╣рд╛рдВ.

рдордИ: рд╣рдо 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

рдЯрд░реНрдирдХреА рд╕рдорд╛рдзрд╛рди

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдИ рдЬрд┐рд╕реЗ рдореИрдВ рдПрд╕рдПрд╕рдПрдЪ рд╕рддреНрд░ рдореЗрдВ рдЪрд▓рд╛рддрд╛ рд╣реВрдВред рдпрд╣ рд╕реНрдерд╛рдиреАрдп рдЗрдирдкреБрдЯ рдХреЛ рджрдмрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ x11vnc рд╕рд░реНрд╡рд░ рдХреЛ рдмрдврд╝рд╛ рджреЗрддрд╛ рд╣реИ, рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рд╕рдм рдХреБрдЫ рд╡реИрд╕реЗ рд╣реА рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рд╡рд╣ рдерд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рддреАрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд┐рд▓реАрдВ, рд╡реЗ рдпрд╣рд╛рдВ (рдЕрджреНрдпрддрди) рд╣реИрдВред

рд╕реНрд╡рд┐рдЪ_рд▓реЛрдХрд▓_рдХрдВрд╕реЛрд▓:

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

рдЕрдХреНрд╖рдо_рд╕реНрдерд╛рдиреАрдп_рдХрдВрд╕реЛрд▓:

#!/bin/sh

trap "switch_local_console 1" EXIT

while :
do
    switch_local_console 0
    sleep 1
done

рджрд░рдЕрд╕рд▓, рдореБрдЦреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдореЗрд░реЗ рдкрд╛рд╕ рджреЛ рдореЙрдирд┐рдЯрд░ рд╣реИрдВ, рдореИрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рд░реНрд╡рд░ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдирд┐рдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ)ред

vnc_рд╕рд░реНрд╡рд░:

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

рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдПрд╕рдПрд╕рдПрдЪ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЙрдЧрд┐рди рдХрд░реЗрдВ рдФрд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ vnc_server, рдЬрдм рддрдХ рд╡рд╣ рдЬреАрд╡рд┐рдд рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡реАрдПрдирд╕реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдВрдЪ рд╣реИ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдХрдВрд╕реЛрд▓ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИред

рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЕрддрд┐рд░рд┐рдХреНрдд рдФрд░ рд╕реБрдзрд╛рд░реЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ