تعطيل وحدة التحكم المحلية عند استخدام x11vnc

مرحباً بالجميع

على الإنترنت ، هناك العديد من المقالات حول كيفية تكوين اتصال عن بعد لجلسة Xorg حالية عبر x11vnc ، لكنني لم أجد في أي مكان كيفية تثبيت جهاز العرض المحلي والإدخال حتى لا يرى أي شخص يجلس بجوار الكمبيوتر البعيد ما تفعله ولا يراه أزرار الضغط في الجلسة الخاصة بك. تحت cat ، طريقتي لجعل x11vnc أشبه بالاتصال بـ Windows عبر RDP.

لذا ، دعنا نقول أنك تعرف بالفعل كيفية استخدام x11vnc ، إن لم يكن ، يمكنك google أو القراءة على سبيل المثال هنا .

المقدمة: إطلاق x11nvc ، والاتصال به مع العميل ، كل شيء يعمل ، ولكن وحدة التحكم بالكمبيوتر المحلي متوفرة أيضًا للعرض والإدخال.

نريد: خفض وحدة التحكم المحلية (شاشة + لوحة مفاتيح + ماوس) بحيث لا يمكن رؤية أي شيء وإدخاله.

نحن خفض المراقبين


أول ما تبادر إلى الذهن كان فقط إيقاف تشغيل الشاشة عبر xrandr ، على سبيل المثال مثل هذا:

$ xrandr --output CRT1 --off 

ولكن في الوقت نفسه ، تبدأ بيئة النافذة (لدي KDE) في الاعتقاد بأن الشاشة قد تم إيقافها بالفعل وبدأت في إلقاء النوافذ والألواح ، وكل شيء يتحرك ويصبح حزينًا.
هناك طريقة أكثر إثارة للاهتمام ، وهي إرسال الشاشة إلى النوم ، يمكنك القيام بذلك على سبيل المثال مثل هذا:

 $ xset dpms force off 

لكن هنا ، أيضًا ، ليس كل شيء يسير بسلاسة. يستيقظ النظام من الشاشة في الحدث الأول. أبسط عكاز في شكل دورة يساعد:

 while : do xset dpms force off sleep .5 done 

لم أفكر أكثر من ذلك - لقد كان كسلًا ، وهو يفي بالغرض منه - لا تظهر أجهزة العرض أي شيء ، حتى لو قمت بالضغط على الأزرار ، وهز الماوس ، إلخ.

UPD:

شكرا amarao على طريقة أخرى للتحريف إلى الصفر السطوع:
 $ 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 وانطفأت وحدة التحكم المحلية.

شكرا لك على الاهتمام ، والإضافات والتحسينات هي موضع ترحيب.

Source: https://habr.com/ru/post/ar469885/


All Articles