Ich benutze xinput
, um die Einstellungen meiner USB-Maus zu ändern :
xinput set-ptr-feedback 'USB Optical Mouse' 4 1 1
Wie kann ich diese Einstellungen beibehalten, nachdem ich die Maus ausgesteckt oder neu gestartet habe?
Sie können den Befehl cron
eingeben oder zu Ihrem Start hinzufügen, aber keiner von beiden ist besonders elegant. Wenn ich Sie wäre, würde ich dies zu meinen udev-Regeln hinzufügen und das System Ereignisse erkennen und den Befehl bei Bedarf auslösen lassen.
Zuerst benötigen wir den Mausanbieter und Produktstrings. Sie finden diese unter lsusb
. Suchen Sie nach Ihrer Maus. Hier ist meine Maus:
Bus 004 Device 012: ID 1532:000f Razer USA, Ltd
Im Teil 1532:000f
ist 1532
der Verkäufer und 000f
das Produkt.
Also fügen wir udev eine Regel hinzu. udev-Regeln finden Sie in /lib/udev/rules.d/
. Sie können schreiben Sie Ihre eigene oder frech sein und eine andere bearbeiten. Dort gibt es auch ein hilfreiches kleines README, das ich Ihnen empfehlen möchte (cat /lib/udev/rules.d/README
).
Unabhängig davon, was Sie tun, möchten Sie eine Regel wie diese hinzufügen. Beachten Sie, dass ich die IDs von früher verwende, damit dies funktioniert.
BUS=="usb", SYSFS{idVendor}=="1532", SYSFS{idProduct}=="000f", ACTION=="add",
RUN+="/usr/bin/xinput set-ptr-feedback 'USB Optical Mouse' 4 1 1"
udev sollte das sofort aufnehmen.
Beachten Sie, dass udev bei der Konfiguration von Geräten selbst ziemlich clevere Dinge tun kann. Möglicherweise benötigen Sie xinput
überhaupt nicht. Hier ist ein Beispiel für eine benutzerdefinierte Konfiguration für eine Maus.
Ich kann mir keine andere Lösung vorstellen, als einen kleinen Daemon zu starten, der in regelmäßigen Abständen xinput --list
abfragt und einen Befehl ausführt, wenn ein Gerät angeschlossen oder entfernt wird.
Beispielcode:
#! /bin/sh -x
#
# xievd [INTERVAL]
#
# Poll `xinput` device list every INTERVAL seconds (default: 10)
# and run script in ~/.xievd/${device_name}.sh when a device is
# plugged-in (or pulled out).
#
# The device name is the same as given by `xinput --list`, with
# the following transformations applied:
# * any non-alphanumeric character is deleted (except: space, `_` and `-`)
# * leading and trailing spaces are removed
# * any sequence of 1 or more space chars is converted to a single `_`
#
interval=${1:-10}
scripts_dir="$HOME/.xievd"
if [ ! -d "$scripts_dir" ]; then
echo 1>&2 "xievd: No scripts directory -- exiting."
exit 1
fi
state_dir="$(mktemp -t -d xievd.XXXXXX)" \
|| { echo 1>&2 "xievd: Cannot create state directory -- exiting."; exit 1; }
trap "rm -rf $state_dir; exit;" TERM QUIT INT ABRT
process_xinput_device_list() {
touch "${state_dir}/.timestamp"
# find new devices and run "start" script
xinput --list --short \
| fgrep slave \
| sed -r -e 's/id=[0-9]+.+//;s/[^a-z0-9 _-]//ig;s/^ +//;s/ *$//;s/ +/_/g;' \
| (while read device; do
if [ ! -e "${state_dir}/${device}" ]; then
# new device, run plug-in script
[ -x "${scripts_dir}/${device}" ] && "${scripts_dir}/${device}" start
fi
touch "${state_dir}/${device}"
done)
# find removed devices and run "stop" script
for d in "$state_dir"/*; do
if [ "${state_dir}/.timestamp" -nt "$d" ]; then
# device removed, run "stop" script
device="$(basename $d)"
[ -x "${scripts_dir}/${device}" ] && "${scripts_dir}/${device}" stop
rm -f "$d"
fi
done
}
# main loop
while true; do
process_xinput_device_list
sleep $interval
sleep 1
done
# cleanup
rm -rf "$state_dir"
Speichern Sie den obigen Code in einer ausführbaren Datei xievd
irgendwo in Ihrem PATH, fügen Sie sie Ihren Startanwendungen hinzu und erstellen Sie dann ein Shell-Skript ~/.xievd/USB_Optical_Mouse
:
#! /bin/sh
if [ "$1" = "start" ]; then
xinput set-ptr-feedback 'USB Optical Mouse' 4 1 1
fi