This post in a follow up on Tracking down TrackPoint issues. I have noticed few days ago, that hot-plugging a USB mouse "does not work". I normally do not plug a mouse into my thinkpad, so this did not come to my attention so far.
After seeing my cursor would not move after plugging in the mouse, I decided to gather more information, starting with dmesg
to verify the device is connected and recognized. Then, I inspected the output of xinput list
and found that the mouse is listed as a floating slave. Manually running xinput enable "HID 04b3:3107"
fixed the situation, it attached the floating device as a slave to "Virtual core pointer"
.
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=12 [slave pointer (2)]
⎜ ↳ TPPS/2 IBM TrackPoint id=14 [slave pointer (2)]
⎜ ↳ HID 04b3:3107 id=15 [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)]
↳ Video Bus id=8 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ Integrated Camera id=10 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=11 [slave keyboard (3)]
↳ ThinkPad Extra Buttons id=13 [slave keyboard (3)]
After restarting my X session - logging out and back in - with the mouse already connected I found it to be enabled and working correctly.
My conclusion was that the device got connected but not enabled after hot-plugging. I revisited my custom hotplug command in .local/bin/touchpad-config
(see the previous post referred to above). This script was executed whenever on startup, and then, whenever a device is added or removed. Obviously, the touchpad and trackpoint related commands do not need to be run when an external mouse is connected. They are also needless when any device is disconnected.
I was searching for a way to detect which device is being added or removed and preform different logic based on that and came across this example in the GNOME git repository on github. It clearly demonstrated how device information and action is handed over to the script and allowed me to enhance my script with logging so I could see what was happening under the hood.
Eventually, it turned out that my script was only executed a couple of times on startup, but not invoked at all after that when the mouse was hot-plugged. It boiled down to be caused by some cruft in my Xorg configuration, left over after having explored Optimus related tweaks covered in my other posts. I had to change Option "AutoEnableDevices" "false"
in xorg.conf.
Although the original issue was fully resolved by the before mentioned change in to xorg.conf, the sub-optimal .local/bin/touchpad-config
was still bugging me so I altered it to only execute the commands relevant for the event that triggered the script. I ended up with the following hotplug-script, which is working flawlessly in my environment:
#!/bin/sh
action=$2
shift 4
device=$@
log () {
echo "$1" >> /tmp/hotplug-cmd.log
}
log "$action '$device'"
if [ x"$action" = xadded -o x"$action" = xpresent ]; then
case $device in
"SynPS/2 Synaptics TouchPad")
synclient PalmDetect=1 PalmMinWidth=5 \
TapButton3=2 HorizTwoFingerScroll=1
log "configured touchpad"
;;
"TPPS/2 IBM TrackPoint")
xinput disable "<default pointer>"
xinput enable "TPPS/2 IBM TrackPoint"
log "disabled <default pointer>, enabled trackpoint"
;;
*)
log "nop"
;;
esac
fi
Note that the script above still includes logging which may be safely removed.
No comments:
Post a Comment