Γεια σε όλους,
Υπάρχουν πολλά άρθρα στο Διαδίκτυο σχετικά με το πώς να ρυθμίσετε μια απομακρυσμένη σύνδεση σε μια υπάρχουσα συνεδρία Xorg μέσω x11vnc, αλλά δεν βρήκα πουθενά πώς να καταστείλετε την τοπική οθόνη και την είσοδο έτσι ώστε όποιος κάθεται δίπλα στον απομακρυσμένο υπολογιστή να κάνει δεν βλέπει τι κάνετε και δεν πατάει κουμπιά στη συνεδρία σας. Κάτω από την περικοπή είναι η μέθοδος μου για να κάνω το 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:
σας ευχαριστώ
$ 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 και η τοπική κονσόλα έχει σβήσει.
Σας ευχαριστούμε για την προσοχή σας, είναι ευπρόσδεκτες οι προσθήκες και οι βελτιώσεις.
Πηγή: www.habr.com