マウスがコンピューターに接続されているときに、自動的に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>
これは、/ etc/udev/rules.dに配置された私のudevルールです。
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
Yr udevルールによって呼び出されるスクリプトでは、while, do, done
スニペットを以下に配置します。beforexinput
パラメーターの調整。
#!/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
マウスがBluetoothによって適切にテザリングされるまで、およびxinput --set-prop
cmdsが起動するまで、yrスクリプトは0.1秒の連続した時間間隔を待機できます。
マウスの手の動きに対する反応を微調整するには、3つの方法があることに注意してください。
this および this outをチェックして、これらのパラメーター値が何を表しているかを正確に把握します。 「速度のスケーリング」を十分に変更するには、マウスのリフレッシュレート(Hz)を知る必要があります。その値は、マウスのテクニカルデータシートに記載されています。 Velocity Scaling値は1000/refresh_rate_in_Hz
と推定されます。したがって、3.3は300Hzのリフレッシュレートを想定し、10は100Hzのリフレッシュレートを想定しています。
Yrスクリプトは、次のデフォルト値を変更しないようです。
Device Accel Constant Deceleration (528): 2.500000
Device Accel Adaptive Decelaration (529): 1.000000
yr xinput --list-props
cmdで明らかにされたように、prop_id 528の値2.5を変更して、prop_id 529を1(デフォルト)に設定すると、「適応的な加速または減速がないことを意味します」。
Gillesの answer onAU/U&Lから適応したudevルールは、厳密にはyrの場合には適用されません。必要なのは、デバイスを「追加」するとき、つまりデバイスの存在が最初にカーネルイベントをトリガーするとすぐに適用されるルールです。したがって、yr udevルールは単純に次のようになります。
ACTION=="add", SUBSYSTEMS=="input", ATTRS{idVendor}=="____", ATTRS{idProduct}=="____", RUN+="/usr/local/sbin/fixmouse"
____を実際のデバイスのidVendor
およびidProduct
に置き換える必要があります。その情報を見つけるには:
$ udevadm monitor
yr BTマウスを接続します。 「KERNEL」が表示されている行を読みます。何かに似ています:
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"
ハードウェアの組み立て方法に応じて、(idVendor、idProduct)値の2つまたは3つのペアを取得する必要があります。私のユースケースは次のとおりです:
ATTRS{idVendor}=="192f"
ATTRS{idProduct}=="0916"
ATTRS{idVendor}=="1a40"
ATTRS{idProduct}=="0101"
ATTRS{idVendor}=="1d6b"
ATTRS{idProduct}=="0002"
表示される順にyr 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
これが正しかったことを願っています。どちらの方法でもお知らせください。