J'utilise xinput
à modifie les paramètres de ma souris USB :
xinput set-ptr-feedback 'USB Optical Mouse' 4 1 1
Comment puis-je rendre ces paramètres persistants après avoir débranché la souris ou redémarré?
Vous pouvez cron
la commande ou l'ajouter à votre démarrage, mais aucune n'est particulièrement élégante. Si j’étais vous, j’ajouterais cela à mes règles udev et laisserais le système détecter les événements et déclencher la commande quand il le faudrait.
Nous avons d’abord besoin du vendeur de souris et des chaînes de produit. Vous pouvez les trouver via lsusb
. Cherchez votre souris. Voici ma souris apparaît:
Bus 004 Device 012: ID 1532:000f Razer USA, Ltd
Dans la partie 1532:000f
, 1532
est le fournisseur et 000f
est le produit.
Nous ajoutons donc une règle à udev. Les règles udev se trouvent dans /lib/udev/rules.d/
. Vous pouvez écrire le vôtre ou être effronté et en éditer un autre. Il y a un petit README utile aussi que je vous suggère de parcourir (cat /lib/udev/rules.d/README
).
Selon que vous voulez ajouter une règle comme celle-ci. Notez que j'utilise les identifiants précédents pour que cela fonctionne.
BUS=="usb", SYSFS{idVendor}=="1532", SYSFS{idProduct}=="000f", ACTION=="add",
RUN+="/usr/bin/xinput set-ptr-feedback 'USB Optical Mouse' 4 1 1"
udev devrait le relever immédiatement.
Remarque udev peut faire des choses très intelligentes en ce qui concerne la configuration des périphériques. Vous pourriez ne pas avoir besoin de xinput
du tout. Voici un exemple de ne configuration personnalisée pour une souris.
Je ne peux penser à aucune autre solution que de démarrer un petit démon qui interroge périodiquement xinput --list
et exécute une commande lorsqu'un périphérique est branché ou supprimé.
Exemple de code:
#! /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"
Enregistrez le code ci-dessus dans un fichier exécutable xievd
quelque part dans votre CHEMIN, ajoutez-le à vos applications de démarrage, puis créez un script shell ~/.xievd/USB_Optical_Mouse
:
#! /bin/sh
if [ "$1" = "start" ]; then
xinput set-ptr-feedback 'USB Optical Mouse' 4 1 1
fi