Herkese Merhaba,
İnternette x11vnc aracılığıyla mevcut bir Xorg oturumuna uzaktan bağlantının nasıl kurulacağıyla ilgili pek çok makale var, ancak yerel monitörün ve girişin, uzak bilgisayarın yanında oturan herkesin yapması için nasıl bastırılacağını hiçbir yerde bulamadım. ne yaptığınızı görmüyorsunuz ve oturumunuzda düğmelere basmıyorsunuz. Kesimin altında x11vnc'yi RDP aracılığıyla Windows'a bağlanmaya daha benzer hale getirme yöntemim var.
Diyelim ki x11vnc'nin nasıl kullanılacağını zaten biliyorsunuz, bilmiyorsanız google'a yazabilir veya okuyabilirsiniz örneğin
Verilen: x11nvc'i başlatıyoruz, istemciye bağlanıyoruz, her şey çalışıyor, ancak bilgisayarın yerel konsolu da görüntüleme ve giriş için mevcut.
İstiyoruz: hiçbir şeyin görülmemesi veya girilmemesi için yerel konsolu (monitör + klavye + fare) kapatın.
Monitörleri kapatma
Akla gelen ilk şey monitörü xrandr aracılığıyla kapatmaktı, örneğin şu şekilde:
$ xrandr --output CRT1 --off
ama aynı zamanda pencereleme ortamı (KDE'm var) monitörün gerçekten kapalı olduğunu düşünmeye başlıyor ve pencereleri ve panelleri atmaya başlıyor, her şey dışarı çıkıyor ve üzülüyor.
Monitörü hazırda bekletme moduna geçirmek için daha ilginç bir yol var; bunu örneğin şu şekilde yapabilirsiniz:
$ xset dpms force off
ama burada da her şey düzgün değil. Sistem ilk olayda monitörü uyandırır. Döngü şeklindeki en basit koltuk değneği aşağıdakilere yardımcı olur:
while :
do
xset dpms force off
sleep .5
done
Daha fazla düşünmedim - tembeldim, amacına hizmet ediyor - düğmelere bassam, fareyi hareket ettirsem vb. monitörler hiçbir şey göstermiyor.
UPD:
Teşekkürler
$ xrandr --output CRT1 --brightness 0
Girişin kesilmesi
Girişi devre dışı bırakmak için xinput kullandım. Parametreler olmadan başlatıldığında cihazların bir listesini görüntüler:
$ 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)]
Cihazlar Sanal çekirdek... devre dışı bırakamazsınız - bir hata görüntülenir, ancak geri kalanı açılıp kapatılabilir, örneğin, bir dakika boyunca faresiz kalmanın yolu budur:
xinput disable 9; sleep 60; xinput enable 9
Anahtar teslimi çözüm
Benim durumum için ssh oturumunda çalıştıracağım bir komut dosyası hazırladım. Yerel girişi bastırır ve x11vnc sunucusunu yükseltir ve betiğin tamamlanmasının ardından her şey olduğu gibi döner. Sonuç olarak, üç komut dosyası elde ettik, işte bunlar (güncellendi).
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
devre dışı_local_console:
#!/bin/sh
trap "switch_local_console 1" EXIT
while :
do
switch_local_console 0
sleep 1
done
Aslında ana script (İki monitörüm var, bir ortak sunucu ve her monitör için bir tane kuruyorum).
vnc_sunucusu:
#!/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
Bu kadar. Ssh ile giriş yapın ve başlatın vnc_sunucusu, hayattayken vnc üzerinden erişimimiz var ve yerel konsol söndürüldü.
İlginiz için teşekkür ederiz, eklemeler ve iyileştirmeler bekliyoruz.
Kaynak: habr.com