x11vnc เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจฒเฉ‹เจ•เจฒ เจ•เฉฐเจธเฉ‹เจฒ เจจเฉ‚เฉฐ เจ…เจฏเฉ‹เจ— เจ•เจฐเฉ‹

เจธเจพเจฐเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจธเจค เจธเฉเจฐเฉ€ เจ…เจ•เจพเจฒ,

x11vnc เจฆเฉเจ†เจฐเจพ เจฎเฉŒเจœเฉ‚เจฆเจพ Xorg เจธเฉˆเจธเจผเจจ เจฒเจˆ เจฐเจฟเจฎเฉ‹เจŸ เจ•เจจเฉˆเจ•เจธเจผเจจ เจ•เจฟเจตเฉ‡เจ‚ เจธเฉˆเจŸ เจ…เจช เจ•เจฐเจจเจพ เจนเฉˆ, เจ‡เจธ เจตเจฟเจธเจผเฉ‡ 'เจคเฉ‡ เจ‡เฉฐเจŸเจฐเจจเฉˆเจŸ เจคเฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจฒเฉ‡เจ– เจนเจจ, เจชเจฐ เจฎเฉˆเจจเฉ‚เฉฐ เจ•เจฟเจคเฉ‡ เจตเฉ€ เจ‡เจน เจจเจนเฉ€เจ‚ เจฎเจฟเจฒเจฟเจ† เจนเฉˆ เจ•เจฟ เจธเจฅเจพเจจเจ• เจฎเจพเจจเฉ€เจŸเจฐ เจ…เจคเฉ‡ เจ‡เจจเจชเฉเจŸ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจฆเจฌเจพเจ‡เจ† เจœเจพเจตเฉ‡ เจคเจพเจ‚ เจœเฉ‹ เจฐเจฟเจฎเฉ‹เจŸ เจ•เฉฐเจชเจฟเจŠเจŸเจฐ เจฆเฉ‡ เจ•เฉ‹เจฒ เจฌเฉˆเจ เจพ เจ•เฉ‹เจˆ เจตเฉ€. เจ‡เจน เจจเจพ เจตเฉ‡เจ–เฉ‹ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจ•เฉ€ เจ•เจฐ เจฐเจนเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ เจคเฉเจนเจพเจกเฉ‡ เจธเฉˆเจธเจผเจจ เจตเจฟเฉฑเจš เจฌเจŸเจจ เจจเจนเฉ€เจ‚ เจฆเจฌเจพเจ‰เจ‚เจฆเฉ‡ เจนเจจเฅค เจ•เฉฑเจŸ เจฆเฉ‡ เจนเฉ‡เจ เจพเจ‚ x11vnc เจจเฉ‚เฉฐ RDP เจฆเฉเจ†เจฐเจพ เจตเจฟเฉฐเจกเฉ‹เจœเจผ เจจเจพเจฒ เจœเฉเฉœเจจ เจฆเฉ‡ เจธเจฎเจพเจจ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจฎเฉ‡เจฐเจพ เจคเจฐเฉ€เจ•เจพ เจนเฉˆเฅค

เจ‡เจธ เจฒเจˆ, เจฎเฉฐเจจ เจฒเจ“ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจœเจพเจฃเจฆเฉ‡ เจนเฉ‹ เจ•เจฟ x11vnc เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐเจจเฉ€ เจนเฉˆ, เจœเฉ‡ เจจเจนเฉ€เจ‚, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจ—เฉ‚เจ—เจฒ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจœเจพเจ‚ เจ‰เจฆเจพเจนเจฐเจฃ เจฒเจˆ เจชเฉœเฉเจน เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ‡เฉฑเจฅเฉ‡.

เจฆเจฟเฉฑเจคเจพ เจ—เจฟเจ†: เจ…เจธเฉ€เจ‚ x11nvc เจฒเจพเจ‚เจš เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจ‡เจธเจจเฉ‚เฉฐ เจ•เจฒเจพเจ‡เฉฐเจŸ เจจเจพเจฒ เจœเฉ‹เฉœเจฆเฉ‡ เจนเจพเจ‚, เจธเจญ เจ•เฉเจ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ, เจชเจฐ เจ•เฉฐเจชเจฟเจŠเจŸเจฐ เจฆเจพ เจฒเฉ‹เจ•เจฒ เจ•เฉฐเจธเฉ‹เจฒ เจตเฉ€ เจฆเฉ‡เจ–เจฃ เจ…เจคเฉ‡ เจ‡เจจเจชเฉเจŸ เจฒเจˆ เจ‰เจชเจฒเจฌเจง เจนเฉˆเฅค

เจ…เจธเฉ€เจ‚ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจพเจ‚: เจฒเฉ‹เจ•เจฒ เจ•เฉฐเจธเฉ‹เจฒ (เจฎเจพเจจเฉ€เจŸเจฐ + เจ•เฉ€เจฌเฉ‹เจฐเจก + เจฎเจพเจŠเจธ) เจจเฉ‚เฉฐ เจฌเฉฐเจฆ เจ•เจฐเฉ‹ เจคเจพเจ‚ เจœเฉ‹ เจ•เฉเจ เจตเฉ€ เจฆเฉ‡เจ–เจฟเจ† เจœเจพเจ‚ เจฆเจพเจ–เจฒ เจจเจพ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เฉ‡เฅค

เจฎเจพเจจเฉ€เจŸเจฐ เจฌเฉฐเจฆ เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ

เจชเจนเจฟเจฒเฉ€ เจ—เฉฑเจฒ เจœเฉ‹ เจฎเจจ เจตเจฟเฉฑเจš เจ†เจˆ เจ‰เจน เจธเฉ€ xrandr เจฆเฉเจ†เจฐเจพ เจฎเจพเจจเฉ€เจŸเจฐ เจจเฉ‚เฉฐ เจฌเฉฐเจฆ เจ•เจฐเจจเจพ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚:

$ xrandr --output CRT1 --off

เจชเจฐ เจ‰เจธเฉ‡ เจธเจฎเฉ‡เจ‚, เจตเจฟเฉฐเจกเฉ‹เจฟเฉฐเจ— เจตเจพเจคเจพเจตเจฐเจฃ (เจฎเฉ‡เจฐเฉ‡ เจ•เฉ‹เจฒ KDE เจนเฉˆ) เจ‡เจน เจธเฉ‹เจšเจฃเจพ เจธเจผเฉเจฐเฉ‚ เจ•เจฐ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ เจ•เจฟ เจฎเจพเจจเฉ€เจŸเจฐ เจ…เจธเจฒ เจตเจฟเฉฑเจš เจฌเฉฐเจฆ เจนเฉ‹ เจ—เจฟเจ† เจนเฉˆ เจ…เจคเฉ‡ เจตเจฟเฉฐเจกเฉ‹เจœเจผ เจ…เจคเฉ‡ เจชเฉˆเจจเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจธเฉเฉฑเจŸเจฃเจพ เจธเจผเฉเจฐเฉ‚ เจ•เจฐ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ, เจนเจฐ เจšเฉ€เจœเจผ เจฌเจพเจนเจฐ เจšเจฒเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจ‰เจฆเจพเจธ เจนเฉ‹ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค
เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจฆเจฟเจฒเจšเจธเจช เจคเจฐเฉ€เจ•เจพ เจนเฉˆ, เจœเฉ‹ เจ•เจฟ เจฎเจพเจจเฉ€เจŸเจฐ เจจเฉ‚เฉฐ เจนเจพเจˆเจฌเจฐเจจเฉ‡เจธเจผเจจ เจตเจฟเฉฑเจš เจญเฉ‡เจœเจฃเจพ เจนเฉˆ, เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ:

$ 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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹