Я пытаюсь замедлить чувствительность к Magic Mouse с помощью команды xinput
, когда моя мышь подключена к компьютеру.
Мне удалось создать файл в rules.d
, который вызывает скрипт оболочки. Проблема в том, что он работает хорошо для всех сценариев, кроме команды xinput
, потому что правило запускает сценарий до того, как мышь будет указана между другими устройствами ввода, и поэтому команда xinput
не может его найти. Итак, у меня вопрос: есть ли способ запустить нужную мне команду только после того, как эта мышь будет обнаружена в качестве устройства ввода, или есть другие способы решения моей проблемы.
Из терминала, до того, как мышь подключается по BT:
$ hcitool inq
Inquiring ...
00:1E:52:EE:0C:1B clock offset: 0x33fb class: 0x3a0104
84:38:35:31:CC:6B clock offset: 0x1353 class: 0x002580
$ hcitool scan
Scanning ...
84:38:35:31:CC:6B Mouse of Elios
00:1E:52:EE:0C:1B Elios
После того, как мышь подключается по BT, я получаю:
$ hcitool info 84:38:35:31:CC:6B
Requesting information ...
BD Address: 84:38:35:31:CC:6B
Device Name: Mouse of Elios
LMP Version: 2.0 (0x3) LMP Subversion: 0x31c
Manufacturer: Apple, Inc. (76)
Features: 0xbd 0x02 0x04 0x38 0x08 0x00 0x00 0x00
<3-slot packets> <encryption> <slot offset> <timing accuracy>
<role switch> <sniff mode> <RSSI> <power control>
<enhanced iscan> <interlaced iscan> <interlaced pscan>
<AFH cap. slave>
Это мое правило udev, помещенное в / etc / udev / rules.d:
SUBSYSTEMS=="input", ATTRS{name}=="Mouse of Elios", RUN+="/home/elios/Documents/FixMouse.sh"
Это мой сценарий оболочки /home/elios/Documents/FixMouse.sh
(отредактированный благодаря ответу Cbhihe):
#!/bin/sh
while [ ! "$(/usr/bin/hcitool info 84:38:35:31:CC:6B 2>&1 > /dev/null; echo $?)" ]; do
sleep 0.1
done
xinput --set-prop "Mouse of Elios" "Device Accel Constant Deceleration" 2.5
Другие сведения:
$ uname -a
Linux dalek 3.19.0-30-generic #34-Ubuntu SMP Fri Oct 2 22:08:41 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
$ xinput --list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Mouse of Elios id=13 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ Apple, Inc Apple Keyboard id=10 [slave keyboard (3)]
↳ Apple, Inc Apple Keyboard id=11 [slave keyboard (3)]
↳ FaceTime HD Camera (Built-in) id=12 [slave keyboard (3)]
$ xinput --list-props "Mouse of Elios"
Device 'Mouse of Elios':
Device Enabled (133): 1
Coordinate Transformation Matrix (135): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
Device Accel Profile (527): 0
Device Accel Constant Deceleration (528): 2.500000
Device Accel Adaptive Deceleration (529): 1.000000
Device Accel Velocity Scaling (530): 10.000000
Device Product ID (253): 1452, 781
Device Node (254): "/dev/input/event5"
Evdev Axis Inversion (531): 0, 0
Evdev Axes Swap (533): 0
Axis Labels (534): "Rel X" (143), "Rel Y" (144), "Rel Horiz Wheel" (517), "Rel Vert Wheel" (518)
Button Labels (535): "Button Left" (136), "Button Middle" (137), "Button Right" (138), "Button Wheel Up" (139), "Button Wheel Down" (140), "Button Horiz Wheel Left" (141), "Button Horiz Wheel Right" (142)
Evdev Scrolling Distance (536): 1, 1, 1
Evdev Middle Button Emulation (537): 0
Evdev Middle Button Timeout (538): 50
Evdev Third Button Emulation (539): 0
Evdev Third Button Emulation Timeout (540): 1000
Evdev Third Button Emulation Button (541): 3
Evdev Third Button Emulation Threshold (542): 20
Evdev Wheel Emulation (543): 0
Evdev Wheel Emulation Axes (544): 0, 0, 4, 5
Evdev Wheel Emulation Inertia (545): 10
Evdev Wheel Emulation Timeout (546): 200
Evdev Wheel Emulation Button (547): 4
Evdev Drag Lock Buttons (548): 0
В сценарии, названном Вашим правилом udev, поместите while, do, done
отрывок ниже, перед Вашим xinput
тонкие настройки параметра.
#!/bin/sh
while [ ! "$(/usr/bin/hcitool info 84:38:35:31:CC:6B >& /dev/null; echo $?)" ]; do
sleep 0.1
done
xinput --set-prop "Mouse of Elios" "Device Accel Constant Deceleration" 5.0
xinput --set-prop "Mouse of Elios" "Device Accel Adaptive Deceleration" 1.0
xinput --set-prop "Mouse of Elios" "Device Accel Velocity Scaling" 3.3
Это позволяет Вашему сценарию ожидать последовательных временных интервалов 0,1 секунд, пока мышь соответственно не ограничена Bluetooth и перед xinput --set-prop
cmds умирают.
Обратите внимание, что у Вас есть три способа настроить ответ Вашей мыши на движение рук.
Проверьте это и это для выяснения точно, что обозначают те значения параметров. Для удовлетворительного изменения "скоростного масштабирования", необходимо будет знать то, что частота обновления мыши (в Гц). Необходимо найти что значение на листе технических данных мыши. Скоростное значение Масштабирования оценивается как 1000/refresh_rate_in_Hz
. Таким образом 3.3 принимают частоту обновления 300 Гц, 10 частота обновления 100 Гц.
Ваш сценарий, кажется, не вносит изменения в значения по умолчанию:
Device Accel Constant Deceleration (528): 2.500000
Device Accel Adaptive Decelaration (529): 1.000000
как показано Вашим xinput --list-props
cmd... Попытайтесь изменить значение 2,5 для prop_id 528 и поймите, что установка от prop_id 529 до 1 (значение по умолчанию) не означает "адаптивного ускорения или замедления".
udev постановляют, что Вы адаптировались из ответа Gilles на AU / U&L не применяется строго к Вашему случаю. То, в чем Вы нуждаетесь, является правилом, которое умирает после "добавления" Вашего устройства, т.е. как только его присутствие сначала инициировало событие ядра. Таким образом, Ваше правило udev должно просто читать:
ACTION=="add", SUBSYSTEMS=="input", ATTRS{idVendor}=="____", ATTRS{idProduct}=="____", RUN+="/usr/local/sbin/fixmouse"
где необходимо заменить ____ физическим устройством idVendor
и idProduct
. Найти что информация:
$ udevadm monitor
Подключите свою мышь BT. Читайте на строке, где "ЯДРО" появляется, что-то подобное:
KERNEL[22576.118379] add /devices/pci0000:00/0000:00:1d.7/hci2/2-3/2-3.4/2-3.4:1.0/0003:192F:0916.0004/input/input23/mouse1 (input)
Для окончания контроля просто введите в CTRL+C, затем:
$ udevadm info -a -p '/devices/pci0000:00/0000:00:1d.7/hci2/2-3/2-3.4/2-3.4' | grep -e "idVendor" -e "idProduct"
Необходимо получить 2 или 3 пар (idVendor, idProduct) значения, в зависимости от того, как аппаратные средства соединены. Мои урожаи примера использования:
ATTRS{idVendor}=="192f"
ATTRS{idProduct}=="0916"
ATTRS{idVendor}=="1a40"
ATTRS{idProduct}=="0101"
ATTRS{idVendor}=="1d6b"
ATTRS{idProduct}=="0002"
Судите их в своем правиле udev в порядке, они появляются. Обычно самый верхний должен быть хорошим.
В заключение, сделайте:
$ sudo mv /home/elios/Documents/FixMouse.sh /usr/local/sbin/fixmouse
$ sudo chown root:root /usr/local/sbin/fixmouse
$ sudo chmod 755 /usr/local/sbin/fixmouse
Надеюсь, что я разобрался в этом. Так или иначе сообщите нам.
/etc/apt/sources.list.d/docker.list
– Panther 5 January 2017 в 04:59