Skip to content

Instantly share code, notes, and snippets.

@denilsonsa
Last active August 6, 2022 15:51
Show Gist options
  • Star 20 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save denilsonsa/978f1d842cf5430f57f6 to your computer and use it in GitHub Desktop.
Save denilsonsa/978f1d842cf5430f57f6 to your computer and use it in GitHub Desktop.
Fix for keyboard/mouse/tablet being detected as joystick in Linux — Moved to https://github.com/denilsonsa/udev-joystick-blacklist
#
# ███╗ ███╗ ██████╗ ██╗ ██╗███████╗██████╗ ████████╗ ██████╗
# ████╗ ████║██╔═══██╗██║ ██║██╔════╝██╔══██╗ ╚══██╔══╝██╔═══██╗
# ██╔████╔██║██║ ██║██║ ██║█████╗ ██║ ██║ ██║ ██║ ██║
# ██║╚██╔╝██║██║ ██║╚██╗ ██╔╝██╔══╝ ██║ ██║ ██║ ██║ ██║
# ██║ ╚═╝ ██║╚██████╔╝ ╚████╔╝ ███████╗██████╔╝ ██║ ╚██████╔╝
# ╚═╝ ╚═╝ ╚═════╝ ╚═══╝ ╚══════╝╚═════╝ ╚═╝ ╚═════╝
#
# ╔═════════════════════════════════════════════════════════════════╗
# ║ https://github.com/denilsonsa/udev-joystick-blacklist ║
# ╚═════════════════════════════════════════════════════════════════╝
#
# These rules are now hosted in a full GitHub repository. This Gist will not be updated anymore.
#
#
# Credit: FIGlet font "ANSI Shadow", generated at http://patorjk.com/software/taag/
#
#####################################################################
#
# /etc/udev/rules.d/51-these-are-not-joysticks.rules
# https://gist.github.com/denilsonsa/978f1d842cf5430f57f6
#
# These are devices that, although recognized by kernel as joysticks, are not
# joysticks. These rules will prevent the non-functional /dev/input/js* and
# /dev/input/event* devices from being used, by removing read/write permissions
# from them.
#
# This is just a blacklist, which will always be incomplete (until the actual
# bug gets fixed). Feel free to add more devices to this list.
#
#
# MODE="0000" prevents the device from being used.
#
# Clearing ID_INPUT_JOYSTICK prevents some /lib/udev/rules.d/* rules from running.
#
# It is not possible to rename a device, so NAME="not-a-joystick%n" does not work.
#
#
# HOW TO INSTALL:
#
# sudo curl -o /etc/udev/rules.d/51-these-are-not-joysticks.rules https://gist.githubusercontent.com/denilsonsa/978f1d842cf5430f57f6/raw
#
#
# There are several reports of this issue on several distros and on the Linux kernel:
# https://bugzilla.kernel.org/show_bug.cgi?id=28912
# https://bugzilla.kernel.org/show_bug.cgi?id=37982
# https://bugs.launchpad.net/ubuntu/+source/linux/+bug/390959
# https://askubuntu.com/questions/173376/how-do-i-disable-joystick-input
# https://ryort.wordpress.com/2011/12/04/udev-and-the-microsoft-digital-media-keyboard-3000-wha/
# https://forum.manjaro.org/index.php?topic=15275.msg144519#msg144519
# https://bbs.archlinux.org/viewtopic.php?id=190485
# https://bbs.archlinux.org/viewtopic.php?id=142469
# https://forums.gentoo.org/viewtopic-t-362032.html
# https://bugs.winehq.org/show_bug.cgi?id=35954
# https://github.com/ValveSoftware/steam-for-linux/issues/3943
#
# A nice (but outdated) udev tutoral:
# http://www.reactivated.net/writing_udev_rules.html
# Microsoft Microsoft Wireless Optical Desktop® 2.10
# Microsoft Wireless Desktop - Comfort Edition
SUBSYSTEM=="input", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="009d", ENV{ID_INPUT_JOYSTICK}=="1", MODE="0000", ENV{ID_INPUT_JOYSTICK}=""
# Microsoft Microsoft® Digital Media Pro Keyboard
# Microsoft Corp. Digital Media Pro Keyboard
SUBSYSTEM=="input", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="00b0", ENV{ID_INPUT_JOYSTICK}=="1", MODE="0000", ENV{ID_INPUT_JOYSTICK}=""
# Microsoft Microsoft® Digital Media Keyboard
# Microsoft Corp. Digital Media Keyboard 1.0A
SUBSYSTEM=="input", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="00b4", ENV{ID_INPUT_JOYSTICK}=="1", MODE="0000", ENV{ID_INPUT_JOYSTICK}=""
# Microsoft Microsoft® Digital Media Keyboard 3000
SUBSYSTEM=="input", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="0730", ENV{ID_INPUT_JOYSTICK}=="1", MODE="0000", ENV{ID_INPUT_JOYSTICK}=""
# Microsoft Microsoft® 2.4GHz Transceiver v6.0
# Microsoft Microsoft® 2.4GHz Transceiver v8.0
# Microsoft Corp. Nano Transceiver v1.0 for Bluetooth
# Microsoft Wireless Mobile Mouse 1000
# Microsoft Wireless Desktop 3000
SUBSYSTEM=="input", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="0745", ENV{ID_INPUT_JOYSTICK}=="1", MODE="0000", ENV{ID_INPUT_JOYSTICK}=""
# Microsoft Corp. Wired Keyboard 600
SUBSYSTEM=="input", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="0750", ENV{ID_INPUT_JOYSTICK}=="1", MODE="0000", ENV{ID_INPUT_JOYSTICK}=""
# Microsoft Corp. Sidewinder X4 keyboard
SUBSYSTEM=="input", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="0768", ENV{ID_INPUT_JOYSTICK}=="1", MODE="0000", ENV{ID_INPUT_JOYSTICK}=""
# Microsoft® 2.4GHz Transceiver v9.0
SUBSYSTEM=="input", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="07a5", ENV{ID_INPUT_JOYSTICK}=="1", MODE="0000", ENV{ID_INPUT_JOYSTICK}=""
# Microsoft® Nano Transceiver v1.0
# Microsoft Wireless Keyboard 800
SUBSYSTEM=="input", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="07b2", ENV{ID_INPUT_JOYSTICK}=="1", MODE="0000", ENV{ID_INPUT_JOYSTICK}=""
# Microsoft® Nano Transceiver v2.0
SUBSYSTEM=="input", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="0800", ENV{ID_INPUT_JOYSTICK}=="1", MODE="0000", ENV{ID_INPUT_JOYSTICK}=""
# WACOM CTE-640-U V4.0-3
# Wacom Co., Ltd Graphire 4 6x8
SUBSYSTEM=="input", ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0016", ENV{ID_INPUT_JOYSTICK}=="1", MODE="0000", ENV{ID_INPUT_JOYSTICK}=""
# Wacom Bamboo Pen and Touch CTH-460
SUBSYSTEM=="input", ATTRS{idVendor}=="056a", ATTRS{idProduct}=="00d1", ENV{ID_INPUT_JOYSTICK}=="1", MODE="0000", ENV{ID_INPUT_JOYSTICK}=""
# A4 Tech Co., G7 750 mouse
SUBSYSTEM=="input", ATTRS{idVendor}=="09da", ATTRS{idProduct}=="054f", ENV{ID_INPUT_JOYSTICK}=="1", MODE="0000", ENV{ID_INPUT_JOYSTICK}=""
# A4 Tech Co., Ltd Bloody RT7 Terminator Wireless
SUBSYSTEM=="input", ATTRS{idVendor}=="09da", ATTRS{idProduct}=="3997", ENV{ID_INPUT_JOYSTICK}=="1", MODE="0000", ENV{ID_INPUT_JOYSTICK}=""
# Modecom MC-5006 Keyboard
SUBSYSTEM=="input", ATTRS{idVendor}=="09da", ATTRS{idProduct}=="51f4", ENV{ID_INPUT_JOYSTICK}=="1", MODE="0000", ENV{ID_INPUT_JOYSTICK}=""
# A4 Tech Co., Ltd Bloody V5
SUBSYSTEM=="input", ATTRS{idVendor}=="09da", ATTRS{idProduct}=="7b22", ENV{ID_INPUT_JOYSTICK}=="1", MODE="0000", ENV{ID_INPUT_JOYSTICK}=""
# A4 Tech Co., Ltd X-718BK Oscar Optical Gaming Mouse
SUBSYSTEM=="input", ATTRS{idVendor}=="09da", ATTRS{idProduct}=="8090", ENV{ID_INPUT_JOYSTICK}=="1", MODE="0000", ENV{ID_INPUT_JOYSTICK}=""
# A4 Tech Co., Ltd XL-750BK Laser Mouse
SUBSYSTEM=="input", ATTRS{idVendor}=="09da", ATTRS{idProduct}=="9090", ENV{ID_INPUT_JOYSTICK}=="1", MODE="0000", ENV{ID_INPUT_JOYSTICK}=""
# A4 Tech Co., Sharkoon Fireglider Optical
SUBSYSTEM=="input", ATTRS{idVendor}=="09da", ATTRS{idProduct}=="9066", ENV{ID_INPUT_JOYSTICK}=="1", MODE="0000", ENV{ID_INPUT_JOYSTICK}=""
# Cooler Master Storm Mizar Mouse
SUBSYSTEM=="input", ATTRS{idVendor}=="2516", ATTRS{idProduct}=="001f", ENV{ID_INPUT_JOYSTICK}=="1", MODE="0000", ENV{ID_INPUT_JOYSTICK}=""
@daniel-ferradal-marquez
Copy link

Not sure what to do here.

My mouse identifies itself with two devices:
cat /proc/bus/input/devices

...
I: Bus=0003 Vendor=1b1c Product=1b12 Version=0111
N: Name="Corsair Corsair M65 RGB Gaming Mouse"
P: Phys=usb-0000:00:1d.0-1.6/input0
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1.6/4-1.6:1.0/0003:1B1C:1B12.0004/input/input10
U: Uniq=0D00502EAE3D8C6953998B42F5001943
H: Handlers=event10 mouse0
B: PROP=0
B: EV=17
B: KEY=1f0000 0 0 0 0
B: REL=103
B: MSC=10

I: Bus=0003 Vendor=1b1c Product=1b12 Version=0111
N: Name="Corsair Corsair M65 RGB Gaming Mouse"
P: Phys=usb-0000:00:1d.0-1.6/input1
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1.6/4-1.6:1.1/0003:1B1C:1B12.0005/input/input11
U: Uniq=0D00502EAE3D8C6953998B42F5001943
H: Handlers=kbd event11 js0 mouse1
B: PROP=0
B: EV=1f
B: KEY=ffffffff0000 0 3800000000 2000000000000 0
B: REL=103
B: ABS=ffffff0000000000
B: MSC=10

I tried this but the devices are still generated as joystick under /dev

Corsair M65 RGB is not a joystick

SUBSYSTEM=="input", ATTRS{idVendor}=="1b1c", ATTRS{idProduct}=="1b12", ENV{ID_INPUT_JOYSTICK}=="1", MODE="0000", ENV{ID_INPUT_JOYSTICK}=""

with this js0 is succesfully removed but mouse is still detected as a joystick by applications (mouse1 and event11?):
SUBSYSTEM=="input", ATTRS{idVendor}=="1b1c", ATTRS{idProduct}=="1b12", ENV{ID_INPUT_JOYSTICK}=="?*", ENV{ID_INPUT_JOYSTICK}=""
SUBSYSTEM=="input", ATTRS{idVendor}=="1b1c", ATTRS{idProduct}=="1b12", KERNEL=="js0", RUN+="/bin/rm %E{DEVNAME}", ENV{ID_INPUT_JOYSTICK}=""

or tried removing all that are detected as joysticks (but using the last two will make my mouse not recognized when X starts):

Corsair M65 RGB is not a joystick

SUBSYSTEM=="input", ATTRS{idVendor}=="1b1c", ATTRS{idProduct}=="1b12", ENV{ID_INPUT_JOYSTICK}=="?*", ENV{ID_INPUT_JOYSTICK}=""
SUBSYSTEM=="input", ATTRS{idVendor}=="1b1c", ATTRS{idProduct}=="1b12", KERNEL=="js0", RUN+="/bin/rm %E{DEVNAME}", ENV{ID_INPUT_JOYSTICK}=""
SUBSYSTEM=="input", ATTRS{idVendor}=="1b1c", ATTRS{idProduct}=="1b12", KERNEL=="event11", RUN+="/bin/rm %E{DEVNAME}", ENV{ID_INPUT_JOYSTICK}=""
SUBSYSTEM=="input", ATTRS{idVendor}=="1b1c", ATTRS{idProduct}=="1b12", KERNEL=="mouse1", RUN+="/bin/rm %E{DEVNAME}", ENV{ID_INPUT_JOYSTICK}=""

$ ls -l /dev/input/by-id/
total 0
lrwxrwxrwx 1 root root 9 dic 8 19:10 usb-Corsair_Corsair_K70R_Gaming_Keyboard-event-if01 -> ../event8
lrwxrwxrwx 1 root root 9 dic 8 19:10 usb-Corsair_Corsair_K70R_Gaming_Keyboard-event-kbd -> ../event7
lrwxrwxrwx 1 root root 9 dic 8 19:10 usb-Corsair_Corsair_K70R_Gaming_Keyboard-if02-event-kbd -> ../event9
lrwxrwxrwx 1 root root 10 dic 8 19:10 usb-Corsair_Corsair_M65_RGB_Gaming_Mouse_0D00502EAE3D8C6953998B42F5001943-event-mouse -> ../event10
lrwxrwxrwx 1 root root 10 dic 8 19:10 usb-Corsair_Corsair_M65_RGB_Gaming_Mouse_0D00502EAE3D8C6953998B42F5001943-if01-event-joystick -> ../event11
lrwxrwxrwx 1 root root 6 dic 8 19:10 usb-Corsair_Corsair_M65_RGB_Gaming_Mouse_0D00502EAE3D8C6953998B42F5001943-if01-joystick -> ../js0
lrwxrwxrwx 1 root root 9 dic 8 19:10 usb-Corsair_Corsair_M65_RGB_Gaming_Mouse_0D00502EAE3D8C6953998B42F5001943-mouse -> ../mouse0

Any tips will be greatly appreciated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment