Esegui un comando shell DOPO che viene rilevato un dispositivo di input Bluetooth?

4

Sto provando a rallentare la sensibilità del mio Magic Mouse usando automaticamente un comando xinput quando il mio mouse è collegato al mio computer.

Sono riuscito a creare un file sotto rules.d , che chiama uno script di shell. Il problema è che funziona bene per tutti gli script tranne il comando xinput perché la regola avvia lo script prima che il mouse venga elencato tra altri dispositivi di input e quindi il comando xinput non riesce a trovarlo. Quindi, la mia domanda è se c'è un modo per eseguire il comando di cui ho bisogno solo dopo che il mouse è stato rilevato come dispositivo di input o se ci sono altre soluzioni al mio problema.

Dal terminale, prima che il mouse si colleghi a 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

Dopo che il mouse si connette da BT, ottengo:

$ 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>

Questa è la mia regola udev posta in /etc/udev/rules.d:

SUBSYSTEMS=="input", ATTRS{name}=="Mouse of Elios", RUN+="/home/elios/Documents/FixMouse.sh"

Questo è il mio script di shell /home/elios/Documents/FixMouse.sh (modificato grazie a Cbhihe answer):

#!/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

Altre informazioni:

$ 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
    
posta elios 16.10.2015 - 09:48

1 risposta

2

Nello script chiamato dalla regola yr udev, posiziona lo snippet while, do, done di seguito, prima le modifiche al parametro 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

Consente allo script yr di attendere intervalli di tempo successivi di 0,1 secondi, fino a quando il mouse non viene collegato in modo appropriato da Bluetooth e prima che i xinput --set-prop cmds si inseriscano.

Nota che hai tre modi per modificare la risposta del mouse al movimento di una mano.

  • Device Accel Constant Deceleration (528): 2.500000
  • Device Accel Adaptive Deceleration (529): 1.000000
  • Device Accel Velocity Scaling (530): 10.000000

Controlla questo e this out per capire esattamente cosa rappresentano quei valori dei parametri. Per modificare in modo soddisfacente il "ridimensionamento della velocità", è necessario sapere qual è la frequenza di aggiornamento del mouse (in Hz). Dovresti trovare quel valore nella scheda tecnica del tuo mouse. Il valore di Velocity Scaling è stimato come 1000/refresh_rate_in_Hz . Quindi 3,3 presuppongono una frequenza di aggiornamento di 300Hz, 10 una frequenza di aggiornamento di 100Hz.

Lo script Yr sembra non apportare alcuna modifica ai valori predefiniti di:

  • Device Accel Constant Deceleration (528): 2.500000
  • Device Accel Adaptive Decelaration (529): 1.000000

come rivelato da yr xinput --list-props cmd ... Prova a modificare il valore di 2.5 per prop_id 528 e rendi conto che l'impostazione prop_id da 529 a 1 (predefinito) significa " nessuna accelerazione o decelerazione adattativa ".

La regola di udev che hai adattato da risposta di Gilles su AU / U & amp; L non si applica rigorosamente al caso. Ciò di cui hai bisogno è una regola che attiva "l'aggiunta" del tuo dispositivo, cioè non appena la sua presenza innesca per la prima volta un evento del kernel. Quindi la regola di udev dovrebbe semplicemente leggere:

ACTION=="add", SUBSYSTEMS=="input", ATTRS{idVendor}=="____", ATTRS{idProduct}=="____", RUN+="/usr/local/sbin/fixmouse"

dove devi sostituire

risposta data Cbhihe 16.10.2015 - 23:31

Leggi altre domande sui tag