summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2024-07-09 11:46:49 +0200
committerSimon Rettberg2024-07-09 11:46:49 +0200
commit417de1d7b7a7ce6c2b2bfef2083deaf9c377f0db (patch)
tree0cbe677a808e6145e7ef6a7070665400ec134bb9
parent[*] Better error handling and messaging (diff)
downloadpvs2-417de1d7b7a7ce6c2b2bfef2083deaf9c377f0db.tar.gz
pvs2-417de1d7b7a7ce6c2b2bfef2083deaf9c377f0db.tar.xz
pvs2-417de1d7b7a7ce6c2b2bfef2083deaf9c377f0db.zip
[sample] Fix kb-lock/unlock, make more robustHEADmaster
Revent versions of xinput change the output format of the list option for disabled devices, which broke kb-unlock.sh Fix this, and hopefully make scripts more robust, by remembering which devices where locked by kb-lock, and then unlock those same devices in kb-unlock. While at it, there's now also some basic protection against concurrent calls to those scripts.
-rwxr-xr-xsample_configuration/kb-lock.sh22
-rwxr-xr-xsample_configuration/kb-unlock.sh19
2 files changed, 36 insertions, 5 deletions
diff --git a/sample_configuration/kb-lock.sh b/sample_configuration/kb-lock.sh
index 27db6da..64e3915 100755
--- a/sample_configuration/kb-lock.sh
+++ b/sample_configuration/kb-lock.sh
@@ -1,12 +1,30 @@
#!/bin/bash
# use xinput to get all keyboards and pointers (mouse)
-keyboards=$(xinput --list | grep -E "slave.*(keyboard|pointer)" | cut -f2 | cut -d'=' -f2)
+keyboards=$( xinput list | grep -E "slave.*(keyboard|pointer)" | grep -oP '(?<=id=)\d+' )
+[ -z "$keyboards" ] && exit 0
+
+# Make sure we're matching lock/unlock calls
+TMP="${XDG_RUNTIME_DIR:-"/run/user/$UID"}/pvslock"
+for i in 10 20 40 80 160 320 0; do
+ if mkdir "$TMP"; then
+ echo "$keyboards" > "$TMP/locked" && break
+ fi
+ usleep ${i}000
+done
+
+if [ "$i" = 0 ]; then
+ echo "locked, raced"
+ exit 0
+fi
for id in $keyboards; do
echo "disabling device #$id"
- xinput --set-prop $id "Device Enabled" 0 &
+ xinput disable "$id" &
done
wait
+touch "$TMP/done"
+
+exit 0
diff --git a/sample_configuration/kb-unlock.sh b/sample_configuration/kb-unlock.sh
index c123414..5f19c62 100755
--- a/sample_configuration/kb-unlock.sh
+++ b/sample_configuration/kb-unlock.sh
@@ -1,12 +1,25 @@
#!/bin/bash
-# use xinput to get all keyboards and pointers (mouse)
-keyboards=$(xinput --list | grep -E "slave.*(keyboard|pointer)" | cut -f2 | cut -d'=' -f2)
+TMP="${XDG_RUNTIME_DIR:-"/run/user/$UID"}/pvslock"
+for i in 10 20 40 80 160 320 0; do
+ if unlink "$TMP/done"; then
+ keyboards=$( cat "$TMP/locked" )
+ break
+ fi
+ [ -d "$TMP" ] || exit 0
+ usleep ${i}000
+done
+if [ "$i" = 0 ]; then
+ echo "locked, raced"
+ exit 0
+fi
for id in $keyboards; do
echo "enabling device #$id"
- xinput --set-prop $id "Device Enabled" 1 &
+ xinput enable "$id" &
done
wait
+rm -rf -- "$TMP"
+exit 0