Sample Header Ad - 728x90

Unix & Linux Stack Exchange

Q&A for users of Linux, FreeBSD and other Unix-like operating systems

Latest Questions

0 votes
1 answers
2844 views
Bind/Unbind Linux Module Automatically
I'm currently trying to create my own USB HID mouse driver as an override of the standard generic USB, which always gets in the way. How can I unbind the generic driver and rebind it to my specific automatically? My Zuoya MMR6 module/driver: https://github.com/vladipus/zuoya-mmr6
I'm currently trying to create my own USB HID mouse driver as an override of the standard generic USB, which always gets in the way. How can I unbind the generic driver and rebind it to my specific automatically? My Zuoya MMR6 module/driver: https://github.com/vladipus/zuoya-mmr6
Vladius (151 rep)
Oct 11, 2018, 06:08 PM • Last activity: May 31, 2025, 12:02 PM
2 votes
1 answers
4108 views
Udev does not always automatically bind the usbhid driver to my device
I have multiple sytems running Ubuntu 19.10. I have a USB HID device which can be detected by each of those systems and I am using the exact same udev rules file on all 3 of them (99-MyDevice.rules) : SUBSYSTEM=="usb",ATTRS{idVendor}=="XXXX",ATTRS{idProduct}=="YYYY",MODE="0660",GROUP="timothy",SYMLI...
I have multiple sytems running Ubuntu 19.10. I have a USB HID device which can be detected by each of those systems and I am using the exact same udev rules file on all 3 of them (99-MyDevice.rules) : SUBSYSTEM=="usb",ATTRS{idVendor}=="XXXX",ATTRS{idProduct}=="YYYY",MODE="0660",GROUP="timothy",SYMLINK+="mydevice%n" KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0664", GROUP="timothy" On all 3 sytems the device correctly shows up as /dev/mydevice... Now when I execute lsusb -t it will output the following: Port 4: Dev 3, If 1, Class=Human Interface Device, Driver=, 12M Notice that the Driver is empty, although sometimes, just every now and then, it will actually load the driver (which is what I want) and output this: Port 4: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 12M When the driver is loaded like this, the software can detect and use the device. The problem is that the driver is almost never automatically loaded. So far I've discovered two ways to load the driver manually (with mixed success): **Method 1:** I can manually assign/bind the driver using: echo -n "4-3:1.0" > /sys/bus/usb/drivers/usbhid/bind At which point lsusb -t shows the driver is loaded Port 4: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 12M And then I have to modify the acl for /dev/mydevice... in order to use it. Note that this method does not always work... feels like random at best. **Method 2:** Logically disconnect and reconnect the device to the computer. (As opposed to physically disconnecting it). I do this by installing VMWare and connecting the device to the guest system for a few seconds. After the device is reconnected to the host, most of the times the driver is bound automatically and the sofware can see/use the device. (Note that using this method, I do not have to modify any acl) **Some notes:** - If I use this device on a RaspberryPI with Raspbian I am not having this issue. - I have multiple devices of the same type and the issue occurs for all of them. - The issue does not occur on Windows - The issue does not occur on Windows inside a VM on the Ubuntu systems - The issue does not occur on MacOS - As far as I remember it did not occur on older version of Ubuntu either (not entirely sure) - The device itself is based on STM32F4. Any idea how I can force the usbhid driver to be bound every time? **Update:** It turns out that if, after physically connecting the device I run the following command, the usbhid driver is correctly bound every time. sudo rmmod usbhid && sudo modprobe usbhid Note that I really have to use rmmod first, simply running modprobe does NOT solve the issue. So: 1. Physically connect: Driver=, 12MB 2. Run the command above: Driver=usbhid, 12MB According to this Source *the driver itself chooses what devices it supports.* So I am guessing the command causes the usbhid driver to re-evaluate whether or not it can handle the device. Now I still need to figure out how to automate it.
TimothyP (121 rep)
Feb 19, 2020, 04:52 AM • Last activity: Apr 14, 2025, 12:00 AM
3 votes
3 answers
367 views
Running a script based on raw events from a specific HID?
bit of a strange issue for you. I have an old 2-in-1 laptop tablet thing that works well enough, except the driver for the touchscreen occasionally crashes, leaving it unusable. I have a simple script to restart it, but when it's not connected to the keyboard this can be a pain. My proposed solution...
bit of a strange issue for you. I have an old 2-in-1 laptop tablet thing that works well enough, except the driver for the touchscreen occasionally crashes, leaving it unusable. I have a simple script to restart it, but when it's not connected to the keyboard this can be a pain. My proposed solution is to run the script when I press both physical volume keys simultaneously (these buttons being the only other input device that I will reliably have connected). I am on Fedora Wayland. Does this seem feasible, and if so, how might it be done?
Gridzbi Spudvetch (65 rep)
Apr 6, 2025, 11:03 PM • Last activity: Apr 11, 2025, 08:32 AM
2 votes
0 answers
52 views
Mouse buttons on keyboard/touchpad (integrated wireless USB adapter) not working - Sony Vaio Tap 11
Installed Fedora 41 (Gnome) on an old Sony Vaio Tap 11. Almost everything works out of the box, more or less. Clicking/releasing the mouse buttons does not work. Tapping on the touchpad does not work either. It is a wireless keyboard/touchpad, connect via an integrated wireless usb adapter. ![](http...
Installed Fedora 41 (Gnome) on an old Sony Vaio Tap 11. Almost everything works out of the box, more or less. Clicking/releasing the mouse buttons does not work. Tapping on the touchpad does not work either. It is a wireless keyboard/touchpad, connect via an integrated wireless usb adapter. ![](https://www.notebookcheck.net/fileadmin/Notebooks/Sony/Vaio_Tap_11_SVT_1121G4EB/VaioTap11_20.jpg) Using other mouse/keyboard devices connected via usb port works fine. But I'd like to use the the original keyboard/touchpad since it can be attached to the tablet with integrated magnets. Before, the machine was running Windows 10 with no problems. Also, the button clicks are still recognized in the recovery/boot menu. Does not look like a Distro/OS problem. Tried Fedora KDE, MX Linux and Ubuntu. No success. Similar problems, recent and old, have been mentioned here: , , , but no solution found so far ... I installed gnome tweaks and input-remapper. That did not help. The only way I could get any feedback from the mouse buttons is by using hid-recorder.
$ sudo hid-recorder --debugfs

Available devices:
/dev/hidraw0:	Cypress Semiconductor WUSB NL Dongle V1.89v
/dev/hidraw1:	STMicroelectronics ST_SENSOR_HUB
/dev/hidraw2:	Cypress Semiconductor WUSB NL Dongle V1.89v
/dev/hidraw3:	N-trig DuoSense
Select the device event number [0-3]: 0
D: 0
R: 143 05 01 09 02 a1 01 09 01 a1 00 85 01 95 05 75 01 05 09 19 01 29 05 15 01 25 05 81 02 95 01 75 03 81 01 75 08 95 03 05 01 09 30 09 31 09 38 15 81 25 7f 81 06 05 0c 0a 38 02 95 01 75 08 15 81 25 7f 81 06 c0 c0 06 00 ff 09 02 a1 01 85 04 15 00 26 ff 00 19 00 2a ff 00 75 10 95 01 81 00 c0 05 0c 09 01 a1 01 85 05 15 00 26 ff 03 19 00 2a ff 03 95 01 75 10 81 00 c0 06 02 ff 09 02 a1 01 85 06 09 02 15 00 26 ff 00 95 07 75 08 b1 02 c0
N: Cypress Semiconductor WUSB NL Dongle V1.89v
P: usb-0000:00:14.0-8.1/input1
I: 3 054c 0872
reading debug interface /sys/kernel/debug/hid/0003:054C:0872.0004/events instead of /dev/hidraw0
D: 0
E: 0.000000 6 01 01 00 00 00 00 # mouse btn left down
E: 1.718003 6 01 00 00 00 00 00 # mouse btn left up
E: 2.419912 6 01 02 00 00 00 00 # mouse button right down
E: 3.548968 6 01 00 00 00 00 00 # mouse button right up
Monitoring hidraw0 also recognizes mouse/touchpad movements. evtest does recognize keyboard input (event4) and mouse/touchpad movement (event6) but no mouse button clicks. (I tried all devices.)
$ sudo evtest

No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:	Power Button
/dev/input/event1:	Lid Switch
/dev/input/event10:	N-trig DuoSense
/dev/input/event11:	N-trig DuoSense Mouse
/dev/input/event12:	Sony Vaio Keys
/dev/input/event13:	Sony Vaio Jogdial
/dev/input/event14:	PC Speaker
/dev/input/event15:	HDA Intel HDMI HDMI/DP,pcm=3
/dev/input/event16:	HDA Intel HDMI HDMI/DP,pcm=7
/dev/input/event17:	HDA Intel HDMI HDMI/DP,pcm=8
/dev/input/event18:	HDA Intel PCH Mic
/dev/input/event19:	HDA Intel PCH Headphone
/dev/input/event2:	Power Button
/dev/input/event3:	AT Translated Set 2 keyboard
/dev/input/event4:	Cypress Semiconductor WUSB NL Dongle V1.89v
/dev/input/event5:	Video Bus
/dev/input/event6:	Cypress Semiconductor WUSB NL Dongle V1.89v Mouse
/dev/input/event7:	Cypress Semiconductor WUSB NL Dongle V1.89v Consumer Control
/dev/input/event8:	N-trig DuoSense UNKNOWN
/dev/input/event9:	N-trig DuoSense Stylus
Select the device event number [0-19]: 6
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x54c product 0x872 version 0x111
Input device name: "Cypress Semiconductor WUSB NL Dongle V1.89v Mouse"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 272 (BTN_LEFT)
    Event code 273 (BTN_RIGHT)
    Event code 274 (BTN_MIDDLE)
    Event code 275 (BTN_SIDE)
    Event code 276 (BTN_EXTRA)
  Event type 2 (EV_REL)
    Event code 0 (REL_X)
    Event code 1 (REL_Y)
    Event code 6 (REL_HWHEEL)
    Event code 8 (REL_WHEEL)
    Event code 11 (REL_WHEEL_HI_RES)
    Event code 12 (REL_HWHEEL_HI_RES)
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
Properties:
Testing ... (interrupt to exit)
Event: time 1743606884.077910, type 2 (EV_REL), code 1 (REL_Y), value -1
Event: time 1743606884.077910, -------------- SYN_REPORT ------------
Event: time 1743606884.096868, type 2 (EV_REL), code 1 (REL_Y), value -1
Event: time 1743606884.096868, -------------- SYN_REPORT ------------
Event: time 1743606884.119840, type 2 (EV_REL), code 0 (REL_X), value -1
Event: time 1743606884.119840, -------------- SYN_REPORT ------------
Event: time 1743606884.162847, type 2 (EV_REL), code 0 (REL_X), value -2
Event: time 1743606884.162847, type 2 (EV_REL), code 1 (REL_Y), value -1
Event: time 1743606884.162847, -------------- SYN_REPORT ------------
I read a lot in different forums but since I am relatively new to linux I could not find out how to tackle this problem. Am I missing a driver? Do I need to write udev rules or hwdb configs? Please advise! Additional Infos:
Wolfgang (21 rep)
Apr 2, 2025, 05:23 PM
0 votes
1 answers
96 views
Adding a usb keyboard driver to a custom Linux firmware
I have a router running a custom Linux as firmware. I can ssh in and install packages via the entware repository. I’ve attached a keyboard to the USB port and I’d like to read the keyboard input. The keyboard appears in lsusb but /dev/input does not exist. I’m assuming the input drivers were removed...
I have a router running a custom Linux as firmware. I can ssh in and install packages via the entware repository. I’ve attached a keyboard to the USB port and I’d like to read the keyboard input. The keyboard appears in lsusb but /dev/input does not exist. I’m assuming the input drivers were removed as part of the customization. Can I add a generic Linux keyboard driver to my firmware? Can I just go to an existing Linux machine and copy the keyboard driver from /dev/input? If not, what else could I try?
Christopher Meyers (101 rep)
Feb 15, 2025, 03:46 PM • Last activity: Feb 15, 2025, 06:42 PM
1 votes
1 answers
48 views
How can I unbind a device without sudo?
Currently I use the following command to disable / enable my touchscreen. `sudo bash -c 'echo " " > /sys/bus/hid/drivers/hid-multitouch/unbind'` Is there a way to achieve this without requiring me to enter my password every time? I'd specifically like to bind it to a shortcut.
Currently I use the following command to disable / enable my touchscreen. sudo bash -c 'echo "" > /sys/bus/hid/drivers/hid-multitouch/unbind' Is there a way to achieve this without requiring me to enter my password every time? I'd specifically like to bind it to a shortcut.
Shade (11 rep)
Dec 26, 2024, 08:11 AM • Last activity: Dec 26, 2024, 09:01 AM
0 votes
1 answers
1861 views
Custom HID Keyboard Not Working In Ubuntu
I have implemented a test HID keyboard using an STM32 microcontroller. Nothing fanct, just sends continous stream of 'A' once connected at the speed of 10/sec. Works just fine in windows. But when connected to my Ubuntu 16 machine, nothing shows up even though it gets recognized properly and I see n...
I have implemented a test HID keyboard using an STM32 microcontroller. Nothing fanct, just sends continous stream of 'A' once connected at the speed of 10/sec. Works just fine in windows. But when connected to my Ubuntu 16 machine, nothing shows up even though it gets recognized properly and I see no errors with dmesg dmesg log: [ +9.163248] usb 2-1.1.2: new full-speed USB device number 34 using ehci-pci [ +0.110516] usb 2-1.1.2: New USB device found, idVendor=0483, idProduct=5710 [ +0.000005] usb 2-1.1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ +0.000003] usb 2-1.1.2: Product: Root Password Unlock Key [ +0.000002] usb 2-1.1.2: Manufacturer: Nomadic Controls [ +0.000002] usb 2-1.1.2: SerialNumber: 123456789 [ +0.002741] input: Nomadic Controls Root Password Unlock Key as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1.2/2-1.1.2:1.0/0003:0483:5710.0012/input/input39 [ +0.059560] hid-generic 0003:0483:5710.0012: input,hidraw2: USB HID v1.00 Keyboard [Nomadic Controls Root Password Unlock Key] on usb-0000:00:1d.0-1.1.2/input0 I tested with evtest and I see that the data is coming in fine, just not getting displayed on screen for some reason evtest log Input device ID: bus 0x3 vendor 0x483 product 0x5710 version 0x100 Input device name: "Nomadic Controls Root Password Unlock Key" Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 1 (KEY_ESC) Event code 2 (KEY_1) Event code 3 (KEY_2) Event code 4 (KEY_3) Event code 5 (KEY_4) Event code 6 (KEY_5) Event code 7 (KEY_6) Event code 8 (KEY_7) Event code 9 (KEY_8) Event code 10 (KEY_9) Event code 11 (KEY_0) Event code 12 (KEY_MINUS) Event code 13 (KEY_EQUAL) Event code 14 (KEY_BACKSPACE) Event code 15 (KEY_TAB) Event code 16 (KEY_Q) Event code 17 (KEY_W) Event code 18 (KEY_E) Event code 19 (KEY_R) Event code 20 (KEY_T) Event code 21 (KEY_Y) Event code 22 (KEY_U) Event code 23 (KEY_I) Event code 24 (KEY_O) Event code 25 (KEY_P) Event code 26 (KEY_LEFTBRACE) Event code 27 (KEY_RIGHTBRACE) Event code 28 (KEY_ENTER) Event code 29 (KEY_LEFTCTRL) Event code 30 (KEY_A) Event code 31 (KEY_S) Event code 32 (KEY_D) Event code 33 (KEY_F) Event code 34 (KEY_G) Event code 35 (KEY_H) Event code 36 (KEY_J) Event code 37 (KEY_K) Event code 38 (KEY_L) Event code 39 (KEY_SEMICOLON) Event code 40 (KEY_APOSTROPHE) Event code 41 (KEY_GRAVE) Event code 42 (KEY_LEFTSHIFT) Event code 43 (KEY_BACKSLASH) Event code 44 (KEY_Z) Event code 45 (KEY_X) Event code 46 (KEY_C) Event code 47 (KEY_V) Event code 48 (KEY_B) Event code 49 (KEY_N) Event code 50 (KEY_M) Event code 51 (KEY_COMMA) Event code 52 (KEY_DOT) Event code 53 (KEY_SLASH) Event code 54 (KEY_RIGHTSHIFT) Event code 55 (KEY_KPASTERISK) Event code 56 (KEY_LEFTALT) Event code 57 (KEY_SPACE) Event code 58 (KEY_CAPSLOCK) Event code 59 (KEY_F1) Event code 60 (KEY_F2) Event code 61 (KEY_F3) Event code 62 (KEY_F4) Event code 63 (KEY_F5) Event code 64 (KEY_F6) Event code 65 (KEY_F7) Event code 66 (KEY_F8) Event code 67 (KEY_F9) Event code 68 (KEY_F10) Event code 69 (KEY_NUMLOCK) Event code 70 (KEY_SCROLLLOCK) Event code 71 (KEY_KP7) Event code 72 (KEY_KP8) Event code 73 (KEY_KP9) Event code 74 (KEY_KPMINUS) Event code 75 (KEY_KP4) Event code 76 (KEY_KP5) Event code 77 (KEY_KP6) Event code 78 (KEY_KPPLUS) Event code 79 (KEY_KP1) Event code 80 (KEY_KP2) Event code 81 (KEY_KP3) Event code 82 (KEY_KP0) Event code 83 (KEY_KPDOT) Event code 86 (KEY_102ND) Event code 87 (KEY_F11) Event code 88 (KEY_F12) Event code 96 (KEY_KPENTER) Event code 97 (KEY_RIGHTCTRL) Event code 98 (KEY_KPSLASH) Event code 99 (KEY_SYSRQ) Event code 100 (KEY_RIGHTALT) Event code 102 (KEY_HOME) Event code 103 (KEY_UP) Event code 104 (KEY_PAGEUP) Event code 105 (KEY_LEFT) Event code 106 (KEY_RIGHT) Event code 107 (KEY_END) Event code 108 (KEY_DOWN) Event code 109 (KEY_PAGEDOWN) Event code 110 (KEY_INSERT) Event code 111 (KEY_DELETE) Event code 119 (KEY_PAUSE) Event code 125 (KEY_LEFTMETA) Event code 126 (KEY_RIGHTMETA) Event code 127 (KEY_COMPOSE) Event type 4 (EV_MSC) Event code 4 (MSC_SCAN) Event type 17 (EV_LED) Event code 0 (LED_NUML) state 1 Event code 1 (LED_CAPSL) state 0 Event code 2 (LED_SCROLLL) state 0 Event code 3 (LED_COMPOSE) state 0 Event code 4 (LED_KANA) state 0 Key repeat handling: Repeat type 20 (EV_REP) Repeat code 0 (REP_DELAY) Value 250 Repeat code 1 (REP_PERIOD) Value 33 Properties: Testing ... (interrupt to exit) Event: time 1517685567.317551, type 1 (EV_KEY), code 30 (KEY_A), value 2 Event: time 1517685567.317551, -------------- SYN_REPORT ------------ Event: time 1517685567.357555, type 1 (EV_KEY), code 30 (KEY_A), value 2 Event: time 1517685567.357555, -------------- SYN_REPORT ------------ Event: time 1517685567.397568, type 1 (EV_KEY), code 30 (KEY_A), value 2 Event: time 1517685567.397568, -------------- SYN_REPORT ------------ Event: time 1517685567.421168, type 17 (EV_LED), code 0 (LED_NUML), value 0 Event: time 1517685567.421168, -------------- SYN_REPORT ------------ Event: time 1517685567.437542, type 1 (EV_KEY), code 30 (KEY_A), value 2 Event: time 1517685567.437542, -------------- SYN_REPORT ------------ Event: time 1517685567.477549, type 1 (EV_KEY), code 30 (KEY_A), value 2 Event: time 1517685567.477549, -------------- SYN_REPORT ------------ Event: time 1517685567.517555, type 1 (EV_KEY), code 30 (KEY_A), value 2 Event: time 1517685567.517555, -------------- SYN_REPORT ------------ Event: time 1517685567.557554, type 1 (EV_KEY), code 30 (KEY_A), value 2 Event: time 1517685567.557554, -------------- SYN_REPORT ------------ Event: time 1517685567.597552, type 1 (EV_KEY), code 30 (KEY_A), value 2 Event: time 1517685567.597552, -------------- SYN_REPORT ------------ Event: time 1517685567.637564, type 1 (EV_KEY), code 30 (KEY_A), value 2 Any idea what could be happening here?
Ankit (101 rep)
Feb 3, 2018, 07:25 PM • Last activity: Nov 4, 2024, 05:00 AM
0 votes
0 answers
45 views
USB HID device works on CentOS, FreeBSD, but not Mint
I have a Delcom USB button assembly that is intended for arcade applications as an HID input device. It is recognized and operates correctly on FreeBSD 14 and CentOS 7, but not on Mint 21. On both CentOS and Mint the device triggers entries in dmesg: CentOS (3.10.0-327.28.3.el7.x86_64): ``` [ 730.94...
I have a Delcom USB button assembly that is intended for arcade applications as an HID input device. It is recognized and operates correctly on FreeBSD 14 and CentOS 7, but not on Mint 21. On both CentOS and Mint the device triggers entries in dmesg: CentOS (3.10.0-327.28.3.el7.x86_64):
[  730.949881] usb 2-1.2: new full-speed USB device number 5 using ehci-pci
[  731.038185] usb 2-1.2: New USB device found, idVendor=0fc5, idProduct=b080
[  731.038192] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  731.038196] usb 2-1.2: Product: USB FS IO
[  731.038200] usb 2-1.2: Manufacturer: Delcom Products Inc.
[  731.045382] input: Delcom Products Inc. USB FS IO as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/input/input19
[  731.096612] hid-generic 0003:0FC5:B080.0002: input,hiddev0,hidraw0: USB HID v1.11 Keyboard [Delcom Products Inc. USB FS IO] on usb-0000:00:1d.0-1.2/input0
Mint (5.15.0-91-generic):
[    2.289804] usb 1-5: new full-speed USB device number 5 using xhci_hcd
[    2.440808] usb 1-5: New USB device found, idVendor=0fc5, idProduct=b080, bcdDevice= 0.08
[    2.440833] usb 1-5: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[    2.440845] usb 1-5: Product: USB FS IO
[    2.440855] usb 1-5: Manufacturer: Delcom Products Inc.
...
[    3.248504] input: Delcom Products Inc. USB FS IO Keyboard as /devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5:1.0/0003:0FC5:B080.0002/input/input5
[    3.306486] input: Delcom Products Inc. USB FS IO Mouse as /devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5:1.0/0003:0FC5:B080.0002/input/input6
[    3.307123] input: Delcom Products Inc. USB FS IO as /devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5:1.0/0003:0FC5:B080.0002/input/input7
[    3.307767] hid-generic 0003:0FC5:B080.0002: input,hiddev0,hidraw1: USB HID v1.11 Keyboard [Delcom Products Inc. USB FS IO] on usb-0000:00:14.0-5/input0
...
[  524.320773] usb 1-5: USB disconnect, device number 5
[  532.181496] usb 1-5: new full-speed USB device number 9 using xhci_hcd
[  532.332805] usb 1-5: New USB device found, idVendor=0fc5, idProduct=b080, bcdDevice= 0.08
[  532.332834] usb 1-5: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  532.332848] usb 1-5: Product: USB FS IO
[  532.332859] usb 1-5: Manufacturer: Delcom Products Inc.
lsusb on Mint shows it:
Bus 001 Device 010: ID 0fc5:b080 Delcom Engineering USB FS IO
What do I need to tell Mint to get it to recognize this as an input device?
Jim L. (8715 rep)
Oct 25, 2024, 10:58 PM • Last activity: Oct 25, 2024, 11:06 PM
0 votes
1 answers
159 views
Virtual keyboard using UHID
I am trying to achieve what the QMK firmware does for keyboards but using software. So, I would like to turn off keys, substitute some keys for others, layers and etc. The first thing that appeared for me when searching was [this example](https://github.com/torvalds/linux/blob/master/samples/uhid/uh...
I am trying to achieve what the QMK firmware does for keyboards but using software. So, I would like to turn off keys, substitute some keys for others, layers and etc. The first thing that appeared for me when searching was [this example](https://github.com/torvalds/linux/blob/master/samples/uhid/uhid-example.c) . The problem is, running the test it only works when the terminal that is executing the binary has focus, and I would like to overpass the windowing system. Also the code presents this array that I don't have any idea how to fill.
-C
static unsigned char rdesc[] = {
	0x05, 0x01,	/* USAGE_PAGE (Generic Desktop) */
	0x09, 0x02,	/* USAGE (Mouse) */
	0xa1, 0x01,	/* COLLECTION (Application) */
	0x09, 0x01,		/* USAGE (Pointer) */
	0xa1, 0x00,		/* COLLECTION (Physical) */
	0x85, 0x01,			/* REPORT_ID (1) */
	0x05, 0x09,			/* USAGE_PAGE (Button) */
	0x19, 0x01,			/* USAGE_MINIMUM (Button 1) */
	0x29, 0x03,			/* USAGE_MAXIMUM (Button 3) */
	0x15, 0x00,			/* LOGICAL_MINIMUM (0) */
	0x25, 0x01,			/* LOGICAL_MAXIMUM (1) */
	0x95, 0x03,			/* REPORT_COUNT (3) */
	0x75, 0x01,			/* REPORT_SIZE (1) */
	0x81, 0x02,			/* INPUT (Data,Var,Abs) */
	0x95, 0x01,			/* REPORT_COUNT (1) */
	0x75, 0x05,			/* REPORT_SIZE (5) */
	0x81, 0x01,			/* INPUT (Cnst,Var,Abs) */
	0x05, 0x01,			/* USAGE_PAGE (Generic Desktop) */
	0x09, 0x30,			/* USAGE (X) */
	0x09, 0x31,			/* USAGE (Y) */
	0x09, 0x38,			/* USAGE (WHEEL) */
	0x15, 0x81,			/* LOGICAL_MINIMUM (-127) */
	0x25, 0x7f,			/* LOGICAL_MAXIMUM (127) */
	0x75, 0x08,			/* REPORT_SIZE (8) */
	0x95, 0x03,			/* REPORT_COUNT (3) */
	0x81, 0x06,			/* INPUT (Data,Var,Rel) */
	0xc0,			/* END_COLLECTION */
	0xc0,		/* END_COLLECTION */
	0x05, 0x01,	/* USAGE_PAGE (Generic Desktop) */
	0x09, 0x06,	/* USAGE (Keyboard) */
	0xa1, 0x01,	/* COLLECTION (Application) */
	0x85, 0x02,		/* REPORT_ID (2) */
	0x05, 0x08,		/* USAGE_PAGE (Led) */
	0x19, 0x01,		/* USAGE_MINIMUM (1) */
	0x29, 0x03,		/* USAGE_MAXIMUM (3) */
	0x15, 0x00,		/* LOGICAL_MINIMUM (0) */
	0x25, 0x01,		/* LOGICAL_MAXIMUM (1) */
	0x95, 0x03,		/* REPORT_COUNT (3) */
	0x75, 0x01,		/* REPORT_SIZE (1) */
	0x91, 0x02,		/* Output (Data,Var,Abs) */
	0x95, 0x01,		/* REPORT_COUNT (1) */
	0x75, 0x05,		/* REPORT_SIZE (5) */
	0x91, 0x01,		/* Output (Cnst,Var,Abs) */
	0xc0,		/* END_COLLECTION */
};
I could not find any more documentation on the matter. At this time, I am not even sure if it is possible to do what I want. I have seen things like [KMonad](https://github.com/kmonad/kmonad) that I could not get to work. At the end, these are my questions: * How to fill the rdesc array to keyboards? * How to overpass the windowing system? * Where can I find documentation about UHID?
Henrique Hott (5 rep)
May 3, 2023, 09:46 PM • Last activity: Mar 13, 2024, 09:49 AM
0 votes
1 answers
408 views
Unable to locate package USBHID
Since this morning my mouse is not working anymore on my Debian 11 google cloud VM, so I restarted the machine but the mouse is still not responding to clicking (my keyboard somehow is). I checked and it could be a problem with `usbhid`: ```lang-shell dpkg -l | grep usbhid ``` yields no output meani...
Since this morning my mouse is not working anymore on my Debian 11 google cloud VM, so I restarted the machine but the mouse is still not responding to clicking (my keyboard somehow is). I checked and it could be a problem with usbhid:
-shell
dpkg -l | grep usbhid
yields no output meaning somehow it is not installed. But if I try to install it running
-shell
sudo apt install usbhid
I get this output:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package usbhid
I am not sure how to solve this issue, I have been installing a lot of packages lately, perhaps I messed up along the way? Any help is much appreciatted.
diegobc11 (1 rep)
Jan 9, 2024, 11:47 PM • Last activity: Jan 15, 2024, 07:25 AM
0 votes
0 answers
123 views
How can I get user's idle time of whole day?
How can we get the user's idle time, defined as the time during which the user hasn't struck the keyboard or even made a mouse movement in Ubuntu 22.04. It should display with the username, the user's login, logout time & idle time interval of the user within the whole day. Can anyone let me know, h...
How can we get the user's idle time, defined as the time during which the user hasn't struck the keyboard or even made a mouse movement in Ubuntu 22.04. It should display with the username, the user's login, logout time & idle time interval of the user within the whole day. Can anyone let me know, how can we do that? I want this idle time of the user so that I get the details of the user who is idle for minutes/hours at that specific day time interval, in a whole day. Is there any script or command to get the details of the user for the particular date & time at which the user was idle?
Mahesh Garole (1 rep)
Nov 10, 2023, 10:06 AM • Last activity: Nov 22, 2023, 01:32 PM
1 votes
0 answers
2944 views
Keyboad and mouse pad are not working in Ubuntu-22.04 LTS linux for Lenovo V15 Gen4, 7520U
The keyboard and Mouse/touchpad are not working in Ubuntu-22.04 LTS OS on Lenovo V14 Gen4 7520U CPU. The external keyboard and mouse work perfectly. Is there any solution?
The keyboard and Mouse/touchpad are not working in Ubuntu-22.04 LTS OS on Lenovo V14 Gen4 7520U CPU. The external keyboard and mouse work perfectly. Is there any solution?
Nirmal Bisai (11 rep)
Aug 3, 2023, 04:03 AM • Last activity: Nov 6, 2023, 04:08 AM
0 votes
1 answers
222 views
how to make mouse and keyboard work again after disabled all input devices
I want to disable internal keyboard of my laptap, then I followed [this answer](https://unix.stackexchange.com/a/702857/573951) and [this doc](https://wiki.archlinux.org/title/Dell_XPS_13_(9343)#Disable_the_touchscreen) (because it's Ubuntu and Wayland) so I created a `.rules` includes: ``` KERNELS=...
I want to disable internal keyboard of my laptap, then I followed [this answer](https://unix.stackexchange.com/a/702857/573951) and [this doc](https://wiki.archlinux.org/title/Dell_XPS_13_(9343)#Disable_the_touchscreen) (because it's Ubuntu and Wayland) so I created a .rules includes:
KERNELS=="input2",
ATTRS{name}=="AT Translated Set 2 keyboard",
ENV{LIBINPUT_IGNORE_DEVICE}="1"
finally I reboot Ubuntu. But I found I can't use mouse and external keyboard too.(seems like it disabled all input devices...) How should I fix it? > my ubuntu is in U disk, so I can open it in VMware, but still can't use mouse and keyboard.
> and I didn't config ssh on it, so seems couldn't access by using other machine
> Is there some ways can make my mouse and keyboard work again?
ask (1 rep)
Oct 21, 2023, 11:57 AM • Last activity: Oct 22, 2023, 07:12 AM
1 votes
1 answers
458 views
Hidraw doesn't find device without device-specific kernel driver being loaded
I'm trying to make a userspace Linux program that talks to a Bluetooth HID device, specifically the [Wii remote][1]. When the `hid-wiimote` kernel module is loaded, I can use the [hidapi][2] library (with the `linux-static-hidraw` backend) to talk to the device directly, but the kernel driver does p...
I'm trying to make a userspace Linux program that talks to a Bluetooth HID device, specifically the Wii remote . When the hid-wiimote kernel module is loaded, I can use the hidapi library (with the linux-static-hidraw backend) to talk to the device directly, but the kernel driver does periodic polling and changes the operation mode often. When I blacklist the module in /etc/modprobe.d, the LEDs on the controller flash forever and the library returns this error: > No HID devices with requested VID/PID found in the system. I'm pretty sure I've set up the udev permissions properly, here's my custom rule file:
KERNEL=="hidraw*", KERNELS=="0005:057E:*.*", MODE="0666"
For reference, here's my minimal Rust example:
/**
 * [dependencies]
 * hidapi = { version = "2.4.0", default-features = false, features = ["linux-static-hidraw"] }
 */

use hidapi::HidApi;

fn main() {
    let hid = HidApi::new().unwrap();
    let wiimote = hid.open(0x057e, 0x0306).unwrap(); // error if hid-wiimote isn't loaded
}
Honbra (21 rep)
Jul 21, 2023, 04:22 PM • Last activity: Sep 17, 2023, 02:28 PM
0 votes
0 answers
91 views
"rmmod g_hid" causes kernel crash: "Device 'hidg.0' does not have a release() function, it is broken and must be fixed"
I am getting the below kernel crash when I try to `rmmod` the `g_hid` module. Can someone provide me with a lead? ```none [ 261.125986] ------------[ cut here ]------------ [ 261.130656] Device 'hidg.0' does not have a release() function, it is broken and must be fixed. See Documentation/kobject.txt...
I am getting the below kernel crash when I try to rmmod the g_hid module. Can someone provide me with a lead?
[  261.125986] ------------[ cut here ]------------  
[  261.130656] Device 'hidg.0' does not have a release() function, it is broken and must be fixed. See Documentation/kobject.txt.  
[  261.142142] WARNING: CPU: 2 PID: 938 at drivers/base/core.c:1103 device_release+0x70/0x80  
[  261.150321] Modules linked in: usb_f_hid g_hid(-) qca9377(O) crct10dif_ce phy_generic ci_hdrc_imx ci_hdrc usbmisc_imx  
[  261.160944] CPU: 2 PID: 938 Comm: rmmod Tainted: G           O      5.4.70-2.3.0+g5f2220e87dd8 #1  
[  261.169812] Hardware name: FSL i.MX8MM EVK board (DT)  
[  261.174863] pstate: 40000005 (nZcv daif -PAN -UAO)  
[  261.179655] pc : device_release+0x70/0x80  
[  261.183667] lr : device_release+0x70/0x80  
[  261.187674] sp : ffff8000120cbd50  
[  261.190986] x29: ffff8000120cbd50 x28: ffff0000716a7000  
[  261.196297] x27: 0000000000000000 x26: 0000000000000000  
[  261.201608] x25: 0000000056000000 x24: 0000000000000015  
[  261.206919] x23: ffff800011a55fd0 x22: ffff000072c55080  
[  261.212229] x21: 0000000000000000 x20: ffff000072f85600  
[  261.217540] x19: ffff8000090ec158 x18: 0000000000000010  
[  261.222851] x17: 0000000000000000 x16: 0000000000000000  
[  261.228162] x15: ffff0000716a7470 x14: 6562207473756d20  
[  261.233472] x13: 646e61206e656b6f x12: 7262207369207469  
[  261.238783] x11: 202c6e6f6974636e x10: 7566202928657361  
[  261.244094] x9 : 656c657220612065 x8 : ffff800011ba9000  
[  261.249405] x7 : ffff8000106a1a28 x6 : 0000000000000544  
[  261.254716] x5 : 0000000000000000 x4 : ffff00007dba8188  
[  261.260027] x3 : ffff00007dbaef20 x2 : ffff00007dba8188  
[  261.265337] x1 : 01430cd05f3e4f00 x0 : 0000000000000000  
[  261.270648] Call trace:  
[  261.273094]  device_release+0x70/0x80  
[  261.276757]  kobject_put+0x74/0xf0  
[  261.280158]  put_device+0x10/0x20  
[  261.283474]  platform_device_unregister+0x28/0x38  
[  261.288182]  hidg_cleanup+0x2c/0xb6c [g_hid]  
[  261.292454]  __arm64_sys_delete_module+0x140/0x228  
[  261.297246]  el0_svc_common.constprop.0+0x68/0x160  
[  261.302036]  el0_svc_handler+0x20/0x80  
[  261.305785]  el0_svc+0x8/0x208  
[  261.308837] ---[ end trace 1b878641e3d35ced ]---
Ajita (1 rep)
Aug 17, 2023, 06:33 AM • Last activity: Aug 17, 2023, 08:21 AM
1 votes
2 answers
308 views
Mouse multimedia buttons are not emitting events in `/dev/input/eventX`
I have a mouse (Canyon CND-SGM14RGB) with multiple programmable buttons, half of them are set to be multimedia buttons. Software for configuration is Windows-only, and those buttons work in Windows -- even without the special driver. However in Linux only buttons mapped to standard mouse actions wor...
I have a mouse (Canyon CND-SGM14RGB) with multiple programmable buttons, half of them are set to be multimedia buttons. Software for configuration is Windows-only, and those buttons work in Windows -- even without the special driver. However in Linux only buttons mapped to standard mouse actions work (lmb, rmb, middle, forward/backward). Multimedia buttons do not work. --- I have tried following diagnostic steps: 1. Launching wev (xev alternative for wayland) and pressing all the buttons: Regular buttons work, but multimedia do not. 2. Doing cat /dev/input/eventX and looking for new data: According to /proc/bus/input/devices there are two files associated with the mouse, one did emit garbage when doing regular mouse activities, and both were silent when pressing multimedia buttons. 3. Launching Wireshark and looking for mouse packets, I have found that: - Handshake (???) is sent from device 2.27.0 (bus 2, device 27, endpoint 0) - Regular mouse events (those that are emitted in the /dev/input/eventX) are sent from device 2.27.1 - Multimedia button presses are sent from device 2.27.2. Is there something that I can do to make those buttons work? I can provide Wireshark dump files if needed. EDIT 1: lsusb output
Bus 002 Device 027: ID 258a:0027 SINOWEALTH Wired Gaming Mouse
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x258a 
  idProduct          0x0027 
  bcdDevice            1.02
  iManufacturer           1 SINOWEALTH
  iProduct                2 Wired Gaming Mouse
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x003b
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              480mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      2 Mouse
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      71
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      1 Keyboard
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength     213
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval               1
Device Status:     0x0000
  (Bus Powered)
EDIT 2: relevant libinput list-devices output
Device:           SINOWEALTH Wired Gaming Mouse
Kernel:           /dev/input/event9
Group:            9
Seat:             seat0, default
Capabilities:     pointer 
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      disabled
Nat.scrolling:    disabled
Middle emulation: disabled
Calibration:      n/a
Scroll methods:   button
Click methods:    none
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles:   flat *adaptive
Rotation:         n/a

Device:           SINOWEALTH Wired Gaming Mouse Keyboard
Kernel:           /dev/input/event10
Group:            9
Seat:             seat0, default
Capabilities:     keyboard 
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      n/a
Nat.scrolling:    n/a
Middle emulation: n/a
Calibration:      n/a
Scroll methods:   none
Click methods:    none
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles:   n/a
Rotation:         n/a
Rijenkii (11 rep)
Feb 13, 2023, 05:42 PM • Last activity: Jul 6, 2023, 01:35 PM
0 votes
1 answers
556 views
Binding a mouse to a custom Character Device driver instead of the generic HID one
I am trying to write a simple Linux USB mouse driver, and I've run into a problem with actually getting the information from the mouse to the module. Right now I have a kernel module that can be successfully loaded into the kernel. The module is a character device, and I can access this device via t...
I am trying to write a simple Linux USB mouse driver, and I've run into a problem with actually getting the information from the mouse to the module. Right now I have a kernel module that can be successfully loaded into the kernel. The module is a character device, and I can access this device via the
/dev/mymodule
file, writing and reading from it calls the functions I implemented. However, I don't understand how to feed the data coming from my mouse to this character driver. The mouse has a separate file in
/dev/input
that I can read from, and, when looking at the mouse's entry at
/sys/bus/hid/devices/
I can see that the mouse uses the
-generic
driver (and works like an actual mouse). How can I make the mouse use the character device driver? (preferably this exact mouse and not any others connected to my PC). I feel like I'm misunderstanding something fundamental. Things I've tried that didn't work: * Adding
(/modalias>)
to the module source. * Adding
as follows:
static struct hid_device_id mod_table [] = {
        {HID_USB_DEVICE(1532, 0043)},
        {}
};

MODULE_DEVICE_TABLE(hid, mod_table);
In both cases aliases appeared in the
.alias
after
, but they don't seem to do anything. Another thing I tried is
ing the generic driver, but I don't know what to bind the mouse to for my character driver. Do I need to implement something else for this case? Any help would be appreciated.
TheOwlk (3 rep)
Jan 21, 2023, 01:18 AM • Last activity: Jan 24, 2023, 11:38 AM
3 votes
1 answers
1818 views
Bluetooth keyboard connects, but does not work
I have a Lenovo Duet 3 Bluetooth keyboard, which works fine when connected physically (it has 5 pins for that) to its laptop, and also works as expected when I connect it to my Android phone. However, I cannot get it to work under (Arch) Linux. Kernel and bluetooth stack (bluez-libs etc.) are up to...
I have a Lenovo Duet 3 Bluetooth keyboard, which works fine when connected physically (it has 5 pins for that) to its laptop, and also works as expected when I connect it to my Android phone. However, I cannot get it to work under (Arch) Linux. Kernel and bluetooth stack (bluez-libs etc.) are up to date, so I connect the device using bluetoothctl (output abbreviated for clarity): [bluetooth]# power on Changing power on succeeded [bluetooth]# scan on Discovery started [NEW] Device D6:45:02:72:41:4F Duet 3 BT [bluetooth]# pair D6:45:02:72:41:4F Attempting to pair with D6:45:02:72:41:4F [CHG] Device D6:45:02:72:41:4F Connected: yes [CHG] Device D6:45:02:72:41:4F ServicesResolved: yes [CHG] Device D6:45:02:72:41:4F Paired: yes [NEW] Primary Service (Handle 0x0000) /org/bluez/hci0/dev_D6_45_02_72_41_4F/service000a 00001801-0000-1000-8000-00805f9b34fb Generic Attribute Profile ... {more new services follow, e.g. for Dev. Information, Battery etc.} Pairing successful [Duet 3 BT]# trust D6:45:02:72:41:4F Changing D6:45:02:72:41:4F trust succeeded [Duet 3 BT]# connect D6:45:02:72:41:4F Attempting to connect to D6:45:02:72:41:4F Connection successful [Lenovo Duet 3 BT Folio]# The device stays connected, and I can see battery information. So far, so good, but typing anything or using the trackpad does absolutely nothing, so it's pretty useless as an input device.
Heinrich (153 rep)
Apr 8, 2022, 09:41 AM • Last activity: Dec 27, 2022, 12:04 PM
0 votes
1 answers
399 views
Linux evdev subsystem vs libusb
What are the advantages and disadvantages to using the `evdev` subsystem versus accessing input devices using `libusb`? The [kernel docs for evdev][1] state: > This is the preferred interface for userspace to consume user input, > and all clients are encouraged to use it. That's strong language. Fro...
What are the advantages and disadvantages to using the evdev subsystem versus accessing input devices using libusb? The kernel docs for evdev state: > This is the preferred interface for userspace to consume user input, > and all clients are encouraged to use it. That's strong language. From python (for example) I can access an HID device with https://github.com/gvalkov/python-evdev or https://github.com/trezor/cython-hidapi . These seem to achieve the same goal. Does using libusb add latency? https://unix.stackexchange.com/questions/109406/how-does-libusb-access-kernel-stuff does not seem to mention evdev. Does libusb use libevdev or a similar subsystem?
Jared (105 rep)
Oct 6, 2022, 09:49 PM • Last activity: Oct 7, 2022, 06:30 AM
2 votes
0 answers
696 views
/dev/input/event doesn't report keys being pressed
I have an usb keyboard connected to a linux box. I need to capture all keys that have been pressed and released. [![enter image description here][1]][1] My keyboard n-key rollover meaning that it doesn't have limits on number of concurrent keys being held. They are all detected and reported. They ke...
I have an usb keyboard connected to a linux box. I need to capture all keys that have been pressed and released. enter image description here My keyboard n-key rollover meaning that it doesn't have limits on number of concurrent keys being held. They are all detected and reported. They keyboard works fine in terminal and x-windows. I can press and hold keys one after another and each time a new character appears on the screen. I tried ten and they are all detected. HOWEVER: when I read data from /dev/input/eventX corresponding to keyboard the data stops coming after 6 keys has been pressed. I wrote a small program in node.js, but I can observe the same behaviour even by doing "cat /dev/input/eventX". It's very puzzling, because I would assume that there is a same driver that is used to read keycodes and display them in terminal. Anyone has any idea where and why event file is not receiving any data past 6 keys? What would be a way around this problem ? Tried with RPI (Debian and Ubuntu), OrangePI (Ubuntu) and PC (LinuxMint). Thanks, M here is the node.js code * const InputEvent = require('input-event'); const input = new InputEvent('/dev/input/event0'); function keyReleased(input) { console.log(input.code); } const keyboard = new InputEvent.Keyboard(input); keyboard.on('data' , function(input) { console.log("DATA:" + input.code); }); *
Misha Mikhail (21 rep)
Sep 16, 2022, 06:43 PM • Last activity: Sep 17, 2022, 08:10 PM
Showing page 1 of 20 total questions