Portál AbcLinuxu, 24. srpna 2025 10:36
#!/bin/sh # vnc autolock skript if [ $(pgrep -fc "$(basename "$0")") -gt 1 ]; then exit 1; fi if [ -z $DISPLAY ]; then export DISPLAY=:0; fi v=$(xrandr | awk '/connected/{print $1}') d=$(xinput list | grep -v 'Virtual' | cut -d= -f2 | cut -f1) while sleep 5; do if ss -t | grep -q ':rfb' && [ "$status" != "locked" ]; then s=$(xrandr | awk '/*/{print $1; exit}') # turn off video outputs for i in $v; do xrandr --fb $s --output $i --off done # disable input devices for i in $d; do xinput disable $i done status=locked elif ! ss -t | grep -q ':rfb' && [ "$status" != "open" ]; then # turn on video output for i in $v; do xrandr --output $i --auto done # enable input devices for i in $d; do xinput enable $i done status=open # screensaver #pgrep xtrlock || xtrlock -b & xset s activate fi #echo "$(date +%X) $status" doneChtěl jsem aby to bylo trochu přenositelné protože parsovat výstup programu
xinput list
je celkem peklo. Někdy ukazuje například klávesnicu dvakrát pod stejným jménem ale s jinačíma ID. Proto jsem se rozhodl odpojit kromě těch virtuálních zařízení preventivně všecko. Taky nevím jak ošetřit to vícenásobné spuštění(řádek 3). Když mám skript otevřený například ve vimu tak pgrep si myslí že už je ten skript jakože spuštěný a vrátí true. Program pidof -x
ho nevidí vůbec. Řádek 4 je tam jenom pro případ když jsem to zkoušel spustit přes ssh kde terminál nevidí proměnnou DISPLAY. Jinak se skript chová celkem primitivně. Každých pět sekund kontroluje, jestli náhodou není někdo připojen na port 5900, průběžně si ukládá status, vypíná/zapíná monitory a vstupní zařízení. Kdyby to někoho napadlo zkoušet, tak doporučuju mít na serveru kromě vnc puštěné taky ssh. Když by se náhodou stalo, že skript z nějakého důvodu umře během vzdálené vnc session, mohla by teoreticky nastat situace, že na druhý den přijdete k zamčenému serveru. Ale do takových extrémů by snad dojít nemuselo. Přemýšlím jak udělat aby to bylo trochu víc user-friendly a aby to přitom moc nenabobtnalo. Berte to jenom jako takový počáteční nástřel.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.