Выполнить команду оболочки ПОСЛЕ обнаружения устройства ввода Bluetooth?

Я пытаюсь замедлить чувствительность к 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
4
задан 18 October 2015 в 12:57

1 ответ

В сценарии, названном Вашим правилом 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 умирают.

Обратите внимание, что у Вас есть три способа настроить ответ Вашей мыши на движение рук.

  • Устройство Accel постоянное замедление (528): 2.500000
  • Устройство Accel адаптивное замедление (529): 1.000000
  • Устройство скорость Accel, масштабирующаяся (530): 10.000000

Проверьте это и это для выяснения точно, что обозначают те значения параметров. Для удовлетворительного изменения "скоростного масштабирования", необходимо будет знать то, что частота обновления мыши (в Гц). Необходимо найти что значение на листе технических данных мыши. Скоростное значение Масштабирования оценивается как 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

Надеюсь, что я разобрался в этом. Так или иначе сообщите нам.

2
ответ дан 18 October 2015 в 22:57
  • 1
    потребности обновить другие файлы также " Уродливая запись 1 в файле списка/etc/apt/sources.list.d/docker.list " так редактируют строку 1 в /etc/apt/sources.list.d/docker.list – Panther 5 January 2017 в 04:59

Другие вопросы по тегам:

Похожие вопросы: