Salam hər kəsə,
İnternetdə x11vnc vasitəsilə mövcud Xorg seansına uzaqdan bağlantının necə qurulması mövzusunda bir çox məqalə var, lakin mən heç bir yerdə yerli monitoru və girişi necə basdıracağımı tapmadım ki, uzaq kompüterin yanında oturan hər kəs bunu etsin. nə etdiyinizi görmür və seansda düymələri basmır. Aşağıda x11vnc-ni RDP vasitəsilə Windows-a qoşulmağa bənzətmək üçün mənim metodum var.
Beləliklə, deyək ki, siz artıq x11vnc-dən necə istifadə edəcəyinizi bilirsiniz, əgər yoxsa, məsələn, google-da və ya oxuya bilərsiniz
Verilənlər: x11nvc-ni işə salırıq, ona müştəri ilə qoşuluruq, hər şey işləyir, lakin kompüterin yerli konsolu da baxmaq və daxil etmək üçün mövcuddur.
Biz istəyirik: yerli konsolu (monitor + klaviatura + siçan) söndürün ki, heç bir şey görünməsin və ya daxil olmasın.
Monitorların söndürülməsi
Ağlıma gələn ilk şey sadəcə xrandr vasitəsilə monitoru söndürmək oldu, məsələn:
$ xrandr --output CRT1 --off
lakin eyni zamanda, pəncərə mühiti (məndə KDE var) monitorun həqiqətən söndürüldüyünü düşünməyə başlayır və pəncərələri və panelləri atmağa başlayır, hər şey yerindən tərpənir və kədərlənir.
Monitoru qışlama rejiminə göndərməyin daha maraqlı bir yolu var, məsələn, bunu belə edə bilərsiniz:
$ xset dpms force off
amma burada da hər şey rəvan deyil. Sistem ilk hadisədə monitoru oyandırır. Dövr şəklində ən sadə qoltuqağacı kömək edir:
while :
do
xset dpms force off
sleep .5
done
Daha çox düşünmədim - tənbəl idim, öz məqsədinə xidmət edir - düymələri bassam da, siçanı hərəkət etdirsəm də və s. monitorlar heç nə göstərmir.
UPS:
Təşəkkür
$ xrandr --output CRT1 --brightness 0
Girişin kəsilməsi
Daxiletməni söndürmək üçün xinput istifadə etdim. Parametrlər olmadan işə salındıqda, cihazların siyahısını göstərir:
$ 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 Virtual nüvə... onu söndürə bilməzsiniz - bir səhv göstərilir, lakin qalanları yandırıla və söndürülə bilər, məsələn, bir dəqiqə siçansız qala bilərsiniz:
xinput disable 9; sleep 60; xinput enable 9
Anahtar teslimi həll
Mənim vəziyyətim üçün ssh sessiyasında işlədiyim bir skript hazırladım. O, yerli girişi sıxışdırır və x11vnc serverini qaldırır və skript tamamlandıqdan sonra hər şey olduğu kimi geri qayıdır. Nəticədə üç skript əldə etdik, onlar burada (yeniləndi).
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
Əslində, əsas skript (iki monitorum var, hər bir monitor üçün bir ümumi server və bir də qurdum).
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
Hamısı budur. Ssh vasitəsilə daxil olun və işə salın vnc_server, o sağ ikən vnc vasitəsilə çıxışımız var və yerli konsol söndürülüb.
Diqqətiniz üçün təşəkkür edirik, əlavələr və təkmilləşdirmələr xoşdur.
Mənbə: www.habr.com