Я использую xinput
- , чтобы изменить настройки USB-мыши :
xinput set-ptr-feedback 'USB Optical Mouse' 4 1 1
Как сделать эти настройки постоянными после отключения мыши или перезагрузки?
Вы можете cron
команду или добавить ее в свой автозагрузку, но ни то, ни другое не особенно элегантно . На вашем месте я бы добавил это в мои правила udev и позволил бы системе обнаруживать события и запускать команду, когда это необходимо.
Сначала нам нужны строки поставщика мыши и продукта. Вы можете найти их через lsusb
. Ищите свою мышь. Вот моя мышь:
Bus 004 Device 012: ID 1532:000f Razer USA, Ltd
В части 1532: 000f
, 1532
- это поставщик, а 000f
- это продукт.
Итак, мы добавляем правило в udev. Правила udev находятся в /lib/udev/rules.d/
. Вы можете написать свой или проявить дерзость и отредактировать другой. Там также есть небольшой полезный README, который я предлагаю вам прочитать ( cat /lib/udev/rules.d/README
).
Независимо от того, какое правило вы хотите добавить, подобное этому. Обратите внимание, что для этой работы я использую идентификаторы, полученные ранее.
BUS=="usb", SYSFS{idVendor}=="1532", SYSFS{idProduct}=="000f", ACTION=="add",
RUN+="/usr/bin/xinput set-ptr-feedback 'USB Optical Mouse' 4 1 1"
udev должен немедленно это принять.
Обратите внимание, что udev может делать довольно умные вещи самостоятельно, когда дело доходит до настройки устройств. Возможно, вам вообще не понадобится xinput
. Вот пример пользовательской конфигурации для мыши.
Я не могу придумать другого решения, кроме запуска маленького демона, который
периодически опрашивает xinput --list
и запускает команду, когда устройство
подключен или удален.
Пример кода:
#! /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"
Сохраните приведенный выше код в исполняемом файле xievd
где-нибудь в вашем PATH, добавьте его
в свои запускаемые приложения, а затем создайте
~ / .xievd / USB_Optical_Mouse
сценарий оболочки:
#! /bin/sh
if [ "$1" = "start" ]; then
xinput set-ptr-feedback 'USB Optical Mouse' 4 1 1
fi