ΠΠ΄ΡΠ°Π²Π΅ΠΉΡΠ΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ,
Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°ΡΠ° ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ°ΡΠΈΠΈ Π½Π° ΡΠ΅ΠΌΠ° ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΡΡΡΠΎΠΈΡΠ΅ Π΄ΠΈΡΡΠ°Π½ΡΠΈΠΎΠ½Π½ΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΠΊΡΠΌ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠ° ΡΠ΅ΡΠΈΡ Xorg ΡΡΠ΅Π· x11vnc, Π½ΠΎ Π½Π΅ Π½Π°ΠΌΠ΅ΡΠΈΡ
ΠΊΠ°ΠΊ Π΄Π° Π·Π°Π³Π»ΡΡΠ° Π»ΠΎΠΊΠ°Π»Π½ΠΈΡ ΠΌΠΎΠ½ΠΈΡΠΎΡ ΠΈ Π²Ρ
ΠΎΠ΄, ΡΠ°ΠΊΠ° ΡΠ΅ Π²ΡΠ΅ΠΊΠΈ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅Π΄ΠΈ Π΄ΠΎ ΡΠ΄Π°Π»Π΅ΡΠ΅Π½ ΠΊΠΎΠΌΠΏΡΡΡΡ, Π΄Π° Π½Π΅ Π²ΠΈΠΆΠ΄Π° ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΈ Π΄Π° Π½Π΅ Π½Π°ΡΠΈΡΠΊΠ° Π±ΡΡΠΎΠ½ΠΈ Π² ΡΠ΅ΡΠΈΡΡΠ° Π²ΠΈ. ΠΠΎΠ΄ ΠΊΠ°Ρ ΡΠ΅ ΡΠΏΠΎΠ΄Π΅Π»Ρ ΠΌΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡΠ°Π²Ρ x11vnc ΠΏΠΎ-ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΠΊΡΠΌ Windows ΡΡΠ΅Π· RDP.
Π ΡΠ°ΠΊΠ°, Π΄Π° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΠ΅ Π²Π΅ΡΠ΅ Π·Π½Π°Π΅ΡΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ x11vnc, Π°ΠΊΠΎ Π½Π΅ β ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΠ³ΡΠ³Π»ΠΈΡΠ΅ ΠΈΠ»ΠΈ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ .
ΠΠ°Π΄Π΅Π½ΠΎ: ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ x11vnc, ΡΠ²ΡΡΠ·Π²Π°ΠΌΠ΅ ΡΠ΅ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Π²ΡΠΈΡΠΊΠΎ ΡΠ°Π±ΠΎΡΠΈ, Π½ΠΎ Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΠΊΠΎΠ½Π·ΠΎΠ»Π° Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΡΠ° ΡΡΡΠΎ Π΅ Π΄ΠΎΡΡΡΠΏΠ½Π° Π·Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ ΠΈ Π²Ρ ΠΎΠ΄.
ΠΡΠΊΠ°ΠΌΠ΅: Π΄Π° ΠΈΠ·ΠΊΠ»ΡΡΠΈΠΌ Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΠΊΠΎΠ½Π·ΠΎΠ»Π° (ΠΌΠΎΠ½ΠΈΡΠΎΡ + ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ° + ΠΌΠΈΡΠΊΠ°) ΡΠ°ΠΊΠ°, ΡΠ΅ Π½ΠΈΡΠΎ Π΄Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π²ΠΈΠ΄ΡΠ½ΠΎ ΠΈ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΎ.
ΠΠ·ΠΊΠ»ΡΡΠ²Π°ΠΌΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΡΠ΅
ΠΡΡΠ²ΠΎΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΈ Ρ ΡΡΠΌΠ½Π°, Π±Π΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π΄Π° ΠΈΠ·ΠΊΠ»ΡΡΠ° ΠΌΠΎΠ½ΠΈΡΠΎΡΠ° ΡΡΠ΅Π· xrandr, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊΠ°:
$ xrandr --output CRT1 --off Π½ΠΎ Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ Π³ΡΠ°ΡΠΈΡΠ½Π°ΡΠ° ΡΡΠ΅Π΄Π° (ΠΏΡΠΈ ΠΌΠ΅Π½ KDE) Π·Π°ΠΏΠΎΡΠ²Π° Π΄Π° ΠΌΠΈΡΠ»ΠΈ, ΡΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΡΡ Π½Π°ΠΈΡΡΠΈΠ½Π° Π΅ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ ΠΈ Π·Π°ΠΏΠΎΡΠ²Π° Π΄Π° ΠΏΡΠ΅Ρ
Π²ΡΡΠ»Ρ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ ΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ, Π²ΡΠΈΡΠΊΠΎ ΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΡΠ²Π°Ρ ΠΈ ΡΡΠ°Π²Π° ΡΡΠΆΠ½ΠΎ.
ΠΠΌΠ° ΠΏΠΎ-ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ Π½Π°ΡΠΈΠ½, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΡΡΡΠΎΠΈ Π² ΡΠΎΠ²Π° Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠΈΠΌ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ° Π² Ρ
ΠΈΠ±Π΅ΡΠ½Π°ΡΠΈΡ, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊΠ°:
$ xset dpms force offΠ½ΠΎ ΠΈ ΡΡΠΊ Π½Π΅ Π²ΡΠΈΡΠΊΠΎ Π΅ Π³Π»Π°Π΄ΠΊΠΎ. Π‘ΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΡΡΠ±ΡΠΆΠ΄Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠ° ΠΏΡΠΈ ΠΏΡΡΠ²ΠΎΡΠΎ ΡΡΠ±ΠΈΡΠΈΠ΅. ΠΠΎΠΌΠ°Π³Π° ΠΏΡΠΎΡΡΠΈΡΠΊΠΈΡΡ ΡΡΠΈΠΊ Π½Π° ΡΠΈΠΊΡΠ»:
while :
do
xset dpms force off
sleep .5
doneΠΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°Ρ Π΄Π° ΠΌΠΈΡΠ»Ρ β Π±Π΅ΡΠ΅ ΠΌΠΈ ΠΌΡΡΠ·Π΅Π»ΠΈΠ²ΠΎ, ΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΠ΅Π»ΡΠ° ΡΠΈ β ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΡΠ΅ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ Π½ΠΈΡΠΎ, Π΄ΠΎΡΠΈ ΠΊΠΎΠ³Π°ΡΠΎ Π½Π°ΡΠΈΡΠΊΠ°ΡΠ΅ Π±ΡΡΠΎΠ½ΠΈ, Π΄Π²ΠΈΠΆΠΈΡΠ΅ ΠΌΠΈΡΠΊΠ°ΡΠ° ΠΈ Ρ.Π½.
UPD:
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ Π·Π° ΠΎΡΠ΅ Π΅Π΄ΠΈΠ½ ΠΌΠ΅ΡΠΎΠ΄ Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠΊΠΎΡΡΡΠ° Π½Π° Π½ΡΠ»Π°:
$ 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)]Π£ΡΡΡΠΎΠΉΡΡΠ²Π° Virtual coreβ¦ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ β ΠΈΠ·Π»ΠΈΠ·Π° Π³ΡΠ΅ΡΠΊΠ°, Π½ΠΎ ΠΎΡΡΠ°Π½Π°Π»ΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π²ΠΊΠ»ΡΡΠ²Π°Π½ΠΈ ΠΈ ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°Π½ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π΅ΡΠΎ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΡΡΠ°Π½Π΅ΡΠ΅ Π±Π΅Π· ΠΌΠΈΡΠΊΠ° Π·Π° Π΅Π΄Π½Π° ΠΌΠΈΠ½ΡΡΠ°:
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 ΠΈ ΡΠ³Π°ΡΠ΅Π½Π° Π»ΠΎΠΊΠ°Π»Π½Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π°.
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ΡΠΎ, Π΄ΠΎΠ±Π°Π²ΠΊΠΈ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠ° Π΄ΠΎΠ±ΡΠ΅ Π΄ΠΎΡΠ»ΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
