# Linux Microdia Keyboard (Perixx PX-1800) Chipset Driver # For Chipset `0x0c45`:`0x7603` The kernel reports the chipset as `Microdia` Written for the Perixx PX-1800 USB Keyboard: [Perixx PX-1800 Keyboard](http://www.perixx.com/en/service/Perixx_Manual/GAMING/PX-1800.pdf) Original base: http://swoogan.blogspot.de/2014/09/azio-l70-keyboard-linux-driver.html, https://bitbucket.org/Swoogan/aziokbd > NOTE: Makefile and instructions are only tested on Ubuntu 16.04 and Archlinux 2016.10 (Kernel 4.8.4) # Building in Qt Creator # In the Qt Creator go to the "Projects" and unset the "Shadow build" In the "Build Steps" remove all items and add "make" item. In the make item in the first field set make, in the second field set command (default) for your Makefile. Also you can set your build script. # Installation # ## DKMS ## # debian-based: sudo apt-get install git build-essential linux-headers-generic dkms # fedora: sudo dnf install git kernel-devel kernel-headers sudo dnf groupinstall "Development Tools" "Development Libraries" # arch: sudo pacman -S git base-devel linux-headers dkms # on all platforms: git clone https://git.sprinternet.at/h44z/perixx1800keyboard.git cd perixx1800keyboard sudo ./install.sh dkms ## Manual Install ## # Dependencies: git build-essential linux-headers dkms git clone https://git.sprinternet.at/h44z/perixx1800keyboard.git cd perixx1800keyboard sudo ./install.sh # Blacklisting # **NOTE: install.sh attempts to blacklist the driver for you. You shouldn't need to do anything manually. These instructions are to explain the process, in the event something goes wrong.** You need to blacklist the device from the generic USB hid driver in order for the perixxkbd driver to control it. ## Kernel Module ## If the USB hid driver is compiled as a kernel module you will need to create a quirks file and blacklist it there. You can determine if the driver is a module by running the following: lsmod | grep usbhid If `grep` finds something, it means that the driver is a module. Create a file called `/etc/modprobe.d/usbhid.conf` and add the following to it: options usbhid quirks=0x0c45:0x7603:0x0004 If you find that the generic USB driver is still taking the device, try changing the `0x0004` to a `0x0007`. ## Compiled into Kernel ## If the generic USB hid driver is compiled into the kernel, then the driver is not loaded as a module and setting the option via `modprobe` will not work. In this case you must pass the option to the driver via the grub boot loader. Create a new file in `/etc/default/grub.d/`. For example, you might call it `perixx1800keyboard.conf`. (If your grub package doesn't have this directory, just modify the generic `/etc/default/grub` configuration file): GRUB_CMDLINE_LINUX_DEFAULT='usbhid.quirks=0x0c45:0x7603:0x4' Then run `sudo update-grub` and reboot. Again, if you find that `0x4` doesn't work, try `0x7`. ## Add to initramfs ## On Archlinux the module has to be added to `/etc/mkinitcpio.conf`. Otherwise usbhid will fetch the keyboard before perixxkbd is loaded. Therefor add "perixxkbd" to the MODULES section and rebuild the initramfs with `sudo mkinitcpio -p linux` ## Add a UDEV rule If none of the above works and usbhid takes control over the keyboard, add a custom udev rule to manually rebind the driver. Create a new file `/etc/udev/rules.d/10-perixxkbd.rules`: ``` ATTRS{idVendor}=="0c45", ATTRS{idProduct}=="7603", MODE="0666", PROGRAM="/bin/sh -c 'echo -n $id:1.1 >/sys/bus/usb/drivers/usbhid/unbind;echo -n $id:1.1 >/sys/bus/usb/drivers/perixxkbd/bind'" ```