How to set the automatic disable touchpad after plugging in the external mouse?

@cscs

Will other USB devices make my touchpad unavailable?

What? You’ve never used a Bluetooth mouse?

Nope. But I knew they existed. And my wife uses one.

I just never in my wildest dreams expected to ever interact with one here, on the forum. :wink:

1 Like

Oh … ok … then we should use bluetooth or input subsystem…

KERNEL=="mouse*", SUBSYSTEM=="bluetooth*", ATTR{type}=="bluetooth", ACTION=="add", \
  RUN+="/usr/bin/xinput disable 'ALP001A:00 044E:121B Touchpad'"
KERNEL=="mouse*", SUBSYSTEM=="bluetooth*", ATTR{type}=="bluetooth", ACTION=="remove", \
  RUN+="/usr/bin/xinput enable 'ALP001A:00 044E:121B Touchpad'"

No, and not bluetooth either … it should just match for when a mouse is active.

Can USB and Bluetooth be configured at the same time?

Sure… either in the same file or separate ones.

@cscs Success!

You can add this method to the wiki for the convenience of other users

Glad it worked out… I think thats my first bluetooth udev rule :partying_face:

( my bluetooth rules all start with blacklist :smiling_imp: )

@cscs
Restart the computer

It seems to have failed again

⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ ALP001A:00 044E:121B Mouse                id=12   [slave  pointer  (2)]
⎜   ↳ ALP001A:00 044E:121B Touchpad             id=13   [slave  pointer  (2)]
⎜   ↳ PS/2 Generic Mouse                        id=16   [slave  pointer  (2)]
⎜   ↳ AlpsPS/2 ALPS GlidePoint                  id=19   [slave  pointer  (2)]
⎜   ↳ RAPOO BT3.0 Mouse                         id=20   [slave  pointer  (2)]
⎜   ↳ RAPOO BT3.0 Mouse Consumer Control        id=21   [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)]
    ↳ ALP001A:00 044E:121B UNKNOWN              id=14   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=15   [slave  keyboard (3)]
    ↳ HP WMI hotkeys                            id=17   [slave  keyboard (3)]
    ↳ Wireless hotkeys                          id=18   [slave  keyboard (3)]
    ↳ HP HD Camera: HP HD Camera                id=10   [slave  keyboard (3)]
    ↳ HP HD Camera: HP IR Camera                id=11   [slave  keyboard (3)]
    ↳ RAPOO BT3.0 Mouse Consumer Control        id=22   [slave  keyboard (3)]

There should be no change to the device

How do I determine if a rule is in effect?

xinput disable 'ALP001A:00 044E:121B Touchpad'

The touchpad button still works after the trackpad is disabled

Odd. Basically any rules in the proper locations should be loaded.
If you find the device location, like /sys/devices/platform/AMDI0010:01/i2c-1/i2c-ELAN2203:00/0018:04F3:309A.0002, then you could query things from it like

sudo udevadm test /sys/devices/platform/AMDI0010:01/i2c-1/i2c-ELAN2203:00/0018:04F3:309A.0002

Hm… I wonder if that ‘mouse’ with the same address might be the thing …

xinput disable 'ALP001A:00 044E:121B Mouse'
 cd /sys/devices/platform/AMDI0010:01/i2c-1/                                                    
 ls                                                      
delete_device  device  firmware_node  name  new_device  power  subsystem  uevent  waiting_for_supplier
pwd                                              
/sys/devices/platform/AMDI0010:01/i2c-1

There seems to be something different

It doesn’t seem to work

I know … it was just an example … you would need to find your device.

Maybe you could find it with something like …

sudo udevadm trigger --verbose | grep -i 'ALP001A'

sudo udevadm test /sys/devices/platform/AMDI0011:00/i2c-2/i2c-ALP001A:00/0018:044E:121B.0001

This program is for debugging only, it does not run any program
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.

Trying to open "/etc/systemd/hwdb/hwdb.bin"...
Trying to open "/etc/udev/hwdb.bin"...
Trying to open "/usr/lib/systemd/hwdb/hwdb.bin"...
Trying to open "/usr/lib/udev/hwdb.bin"...
=== trie on-disk ===
tool version:          250
file size:        11810019 bytes
header size             80 bytes
strings            2415171 bytes
nodes              9394768 bytes
Load module index
Found cgroup2 on /sys/fs/cgroup/, full unified hierarchy
Found container virtualization none.
Loaded timestamp for '/etc/systemd/network'.
Loaded timestamp for '/usr/lib/systemd/network'.
Parsed configuration file /usr/lib/systemd/network/99-default.link
Created link configuration context.
Loaded timestamp for '/etc/udev/rules.d'.
Reading rules file: /usr/lib/udev/rules.d/01-md-raid-creating.rules
Reading rules file: /usr/lib/udev/rules.d/10-dm.rules
Reading rules file: /usr/lib/udev/rules.d/11-dm-lvm.rules
Reading rules file: /usr/lib/udev/rules.d/13-dm-disk.rules
Reading rules file: /usr/lib/udev/rules.d/39-usbmuxd.rules
Reading rules file: /usr/lib/udev/rules.d/40-gphoto.rules
Reading rules file: /usr/lib/udev/rules.d/40-usb-media-players.rules
Reading rules file: /usr/lib/udev/rules.d/40-usb_modeswitch.rules
Reading rules file: /usr/lib/udev/rules.d/50-udev-default.rules
Reading rules file: /usr/lib/udev/rules.d/51-android.rules
Reading rules file: /usr/lib/udev/rules.d/56-hpmud.rules
Reading rules file: /usr/lib/udev/rules.d/60-autosuspend.rules
Reading rules file: /usr/lib/udev/rules.d/60-block.rules
Reading rules file: /usr/lib/udev/rules.d/60-cdrom_id.rules
Reading rules file: /usr/lib/udev/rules.d/60-drm.rules
Reading rules file: /usr/lib/udev/rules.d/60-evdev.rules
Reading rules file: /usr/lib/udev/rules.d/60-fido-id.rules
Reading rules file: /usr/lib/udev/rules.d/60-input-id.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-alsa.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-input.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage-tape.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-v4l.rules
Reading rules file: /usr/lib/udev/rules.d/60-rfkill.rules
Reading rules file: /usr/lib/udev/rules.d/60-sensor.rules
Reading rules file: /usr/lib/udev/rules.d/60-serial.rules
Reading rules file: /usr/lib/udev/rules.d/60-tpm-udev.rules
Reading rules file: /usr/lib/udev/rules.d/60-vboxdrv.rules
Reading rules file: /usr/lib/udev/rules.d/61-kde-bluetooth-rfkill.rules
Reading rules file: /usr/lib/udev/rules.d/63-md-raid-arrays.rules
Reading rules file: /usr/lib/udev/rules.d/64-btrfs-dm.rules
Reading rules file: /usr/lib/udev/rules.d/64-btrfs.rules
Reading rules file: /usr/lib/udev/rules.d/64-md-raid-assembly.rules
Reading rules file: /usr/lib/udev/rules.d/65-libwacom.rules
Reading rules file: /usr/lib/udev/rules.d/65-sane.rules
Reading rules file: /usr/lib/udev/rules.d/66-saned.rules
Reading rules file: /etc/udev/rules.d/66-touchpadoff.rules
Reading rules file: /usr/lib/udev/rules.d/69-cd-sensors.rules
Reading rules file: /usr/lib/udev/rules.d/69-dm-lvm.rules
Reading rules file: /usr/lib/udev/rules.d/69-libftdi.rules
Reading rules file: /usr/lib/udev/rules.d/69-libmtp.rules
Reading rules file: /usr/lib/udev/rules.d/69-md-clustered-confirm-device.rules
Reading rules file: /usr/lib/udev/rules.d/70-camera.rules
Reading rules file: /usr/lib/udev/rules.d/70-infrared.rules
Reading rules file: /usr/lib/udev/rules.d/70-joystick.rules
Reading rules file: /usr/lib/udev/rules.d/70-memory.rules
Reading rules file: /usr/lib/udev/rules.d/70-mouse.rules
Reading rules file: /usr/lib/udev/rules.d/70-power-switch.rules
Reading rules file: /usr/lib/udev/rules.d/70-printers.rules
Reading rules file: /usr/lib/udev/rules.d/70-steam-input.rules
Reading rules file: /usr/lib/udev/rules.d/70-steam-vr.rules
Reading rules file: /usr/lib/udev/rules.d/70-touchpad.rules
Reading rules file: /usr/lib/udev/rules.d/70-uaccess.rules
Reading rules file: /usr/lib/udev/rules.d/71-8bitdo-controllers.rules
Reading rules file: /usr/lib/udev/rules.d/71-alpha_imaging_technology_co-vr.rules
Reading rules file: /usr/lib/udev/rules.d/71-astro_gaming-controllers.rules
Reading rules file: /usr/lib/udev/rules.d/71-betop-controllers.rules
Reading rules file: /usr/lib/udev/rules.d/71-hori-controllers.rules
Reading rules file: /usr/lib/udev/rules.d/71-htc-vr.rules
Reading rules file: /usr/lib/udev/rules.d/71-logitech-controllers.rules
Reading rules file: /usr/lib/udev/rules.d/71-mad_catz-controllers.rules
Reading rules file: /usr/lib/udev/rules.d/71-microsoft-controllers.rules
Reading rules file: /usr/lib/udev/rules.d/71-nacon-controllers.rules
Reading rules file: /usr/lib/udev/rules.d/71-nintendo-controllers.rules
Reading rules file: /usr/lib/udev/rules.d/71-nvidia-controllers.rules
Reading rules file: /usr/lib/udev/rules.d/71-pdp-controllers.rules
Reading rules file: /usr/lib/udev/rules.d/71-personal_communication_systems_inc-controllers.rules
Reading rules file: /usr/lib/udev/rules.d/71-powera-controllers.rules
Reading rules file: /usr/lib/udev/rules.d/71-razer-controllers.rules
Reading rules file: /usr/lib/udev/rules.d/71-seat.rules
Reading rules file: /usr/lib/udev/rules.d/71-sony-controllers.rules
Reading rules file: /usr/lib/udev/rules.d/71-sony-vr.rules
Reading rules file: /usr/lib/udev/rules.d/71-valve-controllers.rules
Reading rules file: /usr/lib/udev/rules.d/71-valve-vr.rules
Reading rules file: /usr/lib/udev/rules.d/71-zeroplus_technology_corporation-controllers.rules
Reading rules file: /usr/lib/udev/rules.d/73-seat-late.rules
Reading rules file: /usr/lib/udev/rules.d/75-net-description.rules
Reading rules file: /usr/lib/udev/rules.d/75-probe_mtd.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-broadmobi-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-cinterion-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-dell-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-dlink-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-ericsson-mbm.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-fibocom-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-foxconn-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-gosuncn-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-haier-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-huawei-net-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-longcheer-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-mtk-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-nokia-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-quectel-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-sierra.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-simtech-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-telit-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-tplink-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-ublox-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-x22x-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-zte-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/78-sound-card.rules
Reading rules file: /usr/lib/udev/rules.d/80-drivers.rules
Reading rules file: /usr/lib/udev/rules.d/80-libinput-device-groups.rules
Reading rules file: /usr/lib/udev/rules.d/80-mm-candidate.rules
Reading rules file: /usr/lib/udev/rules.d/80-net-setup-link.rules
Reading rules file: /usr/lib/udev/rules.d/80-udisks2.rules
Reading rules file: /usr/lib/udev/rules.d/81-net-dhcp.rules
Reading rules file: /usr/lib/udev/rules.d/84-nm-drivers.rules
Reading rules file: /usr/lib/udev/rules.d/85-nm-unmanaged.rules
Reading rules file: /usr/lib/udev/rules.d/85-regulatory.rules
Reading rules file: /usr/lib/udev/rules.d/85-tlp.rules
Reading rules file: /usr/lib/udev/rules.d/90-alsa-restore.rules
Reading rules file: /usr/lib/udev/rules.d/90-daxctl-device.rules
Reading rules file: /usr/lib/udev/rules.d/90-fwupd-devices.rules
Reading rules file: /usr/lib/udev/rules.d/90-libinput-fuzz-override.rules
Reading rules file: /usr/lib/udev/rules.d/90-nm-thunderbolt.rules
Reading rules file: /usr/lib/udev/rules.d/90-pipewire-alsa.rules
Reading rules file: /usr/lib/udev/rules.d/90-pulseaudio.rules
Reading rules file: /usr/lib/udev/rules.d/90-udisks2-zram.rules
Reading rules file: /usr/lib/udev/rules.d/90-vconsole.rules
Reading rules file: /usr/lib/udev/rules.d/95-cd-devices.rules
Reading rules file: /usr/lib/udev/rules.d/95-dm-notify.rules
Reading rules file: /usr/lib/udev/rules.d/95-upower-hid.rules
Reading rules file: /usr/lib/udev/rules.d/95-upower-wup.rules
Reading rules file: /usr/lib/udev/rules.d/96-e2scrub.rules
Reading rules file: /usr/lib/udev/rules.d/99-fuse.rules
Reading rules file: /usr/lib/udev/rules.d/99-fuse3.rules
Reading rules file: /usr/lib/udev/rules.d/99-systemd.rules
0018:044E:121B.0001: /usr/lib/udev/rules.d/50-udev-default.rules:14 Importing properties from results of builtin command 'hwdb --subsystem=hid'
0018:044E:121B.0001: hwdb modalias key: "hid:b0018g0004v0000044Ep0000121B"
0018:044E:121B.0001: No entry found from hwdb.
0018:044E:121B.0001: /usr/lib/udev/rules.d/50-udev-default.rules:14 Failed to run builtin 'hwdb --subsystem=hid': No data available
0018:044E:121B.0001: /usr/lib/udev/rules.d/80-drivers.rules:5 RUN 'kmod load '$env{MODALIAS}''
DEVPATH=/devices/platform/AMDI0011:00/i2c-2/i2c-ALP001A:00/0018:044E:121B.0001
DRIVER=hid-multitouch
HID_ID=0018:0000044E:0000121B
HID_NAME=ALP001A:00 044E:121B
HID_PHYS=i2c-ALP001A:00
HID_UNIQ=
MODALIAS=hid:b0018g0004v0000044Ep0000121B
ACTION=add
SUBSYSTEM=hid
USEC_INITIALIZED=1299421197
run: 'kmod load 'hid:b0018g0004v0000044Ep0000121B''
Unload module index
Unloaded link configuration context.

sudo udevadm trigger --verbose | grep -i ‘ALP001A’  :heavy_check_mark:
[sudo] k 的密码:

/sys/devices/LNXSYSTM:00/LNXSYBUS:00/AMDI0011:00/ALP001A:00
/sys/devices/LNXSYSTM:00/LNXSYBUS:00/AMDI0011:00/ALP001A:00/wakeup/wakeup37
/sys/devices/platform/AMDI0011:00/i2c-2/i2c-ALP001A:00
/sys/devices/platform/AMDI0011:00/i2c-2/i2c-ALP001A:00/0018:044E:121B.0001
/sys/devices/platform/AMDI0011:00/i2c-2/i2c-ALP001A:00/0018:044E:121B.0001/hidraw/hidraw0
/sys/devices/platform/AMDI0011:00/i2c-2/i2c-ALP001A:00/0018:044E:121B.0001/input/input24
/sys/devices/platform/AMDI0011:00/i2c-2/i2c-ALP001A:00/0018:044E:121B.0001/input/input24/event15
/sys/devices/platform/AMDI0011:00/i2c-2/i2c-ALP001A:00/0018:044E:121B.0001/input/input24/mouse0
/sys/devices/platform/AMDI0011:00/i2c-2/i2c-ALP001A:00/0018:044E:121B.0001/input/input25
/sys/devices/platform/AMDI0011:00/i2c-2/i2c-ALP001A:00/0018:044E:121B.0001/input/input25/event16
/sys/devices/platform/AMDI0011:00/i2c-2/i2c-ALP001A:00/0018:044E:121B.0001/input/input25/mouse1
/sys/devices/platform/AMDI0011:00/i2c-2/i2c-ALP001A:00/0018:044E:121B.0001/input/input26
/sys/devices/platform/AMDI0011:00/i2c-2/i2c-ALP001A:00/0018:044E:121B.0001/input/input26/event17

I see it ^

@cscs
The file was loaded but not in effect
why?

I do not know … care to share the files exact contents? Maybe there is a typo or something …

  GNU nano 6.0                         /etc/udev/rules.d/66-touchpadoff.rules                                 
KERNEL=="mouse*", SUBSYSTEM=="bluetooth", ACTION=="add", \
  RUN+="/usr/bin/xinput disable 'ALP001A:00 044E:121B Touchpad'"
KERNEL=="mouse*", SUBSYSTEM=="bluetooth", ACTION=="remove", \
  RUN+="/usr/bin/xinput enable 'ALP001A:00 044E:121B Touchpad'"
KERNEL=="mouse*", ATTRS{phys}=="usb*", ACTION=="add", \
  RUN+="/usr/bin/xinput disable 'ALP001A:00 044E:121B Touchpad'"
KERNEL=="mouse*", ATTRS{phys}=="usb*", ACTION=="remove", \
  RUN+="/usr/bin/xinput enable 'ALP001A:00 044E:121B Touchpad'"