ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ,
Π½Π° ΠΏΡΠΎΡΡΠΎΡΠ°Ρ
ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠΎΠ² ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ°ΡΠ΅ΠΉ Π½Π° ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΠ΅ΡΡΠΈΠΈ Xorg ΡΠ΅ΡΠ΅Π· x11vnc, Π½ΠΎ Ρ Π½ΠΈΠ³Π΄Π΅ Π½Π΅ Π½Π°ΡΠ΅Π», ΠΊΠ°ΠΊ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΈΠ΄Π°Π²ΠΈΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΌΠΎΠ½ΠΈΡΠΎΡ ΠΈ Π²Π²ΠΎΠ΄, ΡΡΠΎΠ±Ρ Π»ΡΠ±ΠΎΠΉ, ΠΊΡΠΎ ΡΠΈΠ΄ΠΈΡ ΡΡΠ΄ΠΎΠΌ Ρ ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΌ ΠΊΠΎΠΌΠΏΠΎΠΌ, Π½Π΅ ΡΠΌΠΎΡΡΠ΅Π» ΡΡΠΎ Π²Ρ Π΄Π΅Π»Π°Π΅ΡΠ΅ ΠΈ Π½Π΅ Π½Π°ΠΆΠΈΠΌΠ°Π» ΠΊΠ½ΠΎΠΏΠΎΡΠΊΠΈ Π² Π²Π°ΡΠ΅ΠΉ ΡΠ΅ΡΡΠΈΠΈ. ΠΠΎΠ΄ ΠΊΠ°ΡΠΎΠΌ ΠΌΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±, ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ x11vnc Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡ
ΠΎΠΆΠΈΠΌ Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ Π²ΠΈΠ½Π΄Π΅ ΠΏΠΎ RDP.
ΠΡΠ°ΠΊ, Π΄ΠΎΠΏΡΡΡΠΈΠΌ, Π²Ρ ΡΠΆΠ΅ ΡΠΌΠ΅Π΅ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ x11vnc, Π΅ΡΠ»ΠΈ Π½Π΅Ρ β ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ³ΡΠ³Π»ΠΈΡΡ ΠΈΠ»ΠΈ ΠΏΠΎΡΠΈΡΠ°ΡΡ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ
ΠΠ°Π½ΠΎ: Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ x11nvc, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΠΊ Π½Π΅ΠΌΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ, Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π½ΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΠΊΠΎΠΌΠΏΠ° ΡΠΎΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Π° Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΠΈ Π²Π²ΠΎΠ΄Π°.
Π₯ΠΎΡΠΈΠΌ: Π²ΡΡΡΠ±ΠΈΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠΎΠ»Ρ (ΠΌΠΎΠ½ΠΈΡΠΎΡ + ΠΊΠ»Π°Π²Π° + ΠΌΡΡΠΊΠ°) ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅Π»ΡΠ·Ρ Π±ΡΠ»ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΈ Π²Π²Π΅ΡΡΠΈ.
ΠΡΡΡΠ±Π°Π΅ΠΌ ΠΌΠΎΠ½ΠΈΡΠΎΡΡ
ΠΠ΅ΡΠ²ΠΎΠ΅, ΡΡΠΎ ΠΏΡΠΈΡΠ»ΠΎ Π² Π³ΠΎΠ»ΠΎΠ²Ρ, Π±ΡΠ»ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΎΡΡΡΠ±ΠΈΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡ ΡΠ΅ΡΠ΅Π· 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