Hi! > > (Hint: it is LEDs below regular keyboard.) > > Yes, I know, and if you read this email and the few others, you'll read > that I own a few of them already (for a long time), and I worked on a > cross vendor userspace API to configure them. So I know what I am > talking about. Ok. > > > The positions of the pixels also depend on the physical layout of the > > > keyboard itself. So with the same vendor ID/Product ID, you might have > > > different pixel positions if the device is sold in Europe, or in the > > > US. > > > > If vendor sells different hardware with same IDs, well 1) that's a > > nono, a 2) that's what kernel parameters are for. > > This is already the case (hello hid-uclogic), and no, kernel parameters > are not helping. In that case (uclogic), we ask the device a specific > USB string which has the information, but is not part of HID. This is > dumb, but we don't control hardware makers. Well, good you find other solution. Kernel parameter would have worked as a fallback. > > > But that's just the "easy" part. We can define a kernel API, for sure, > > > but then we need users. And there are several problems here: > > > > > > - first, users of this new kernel API need to be root to address the > > > LEDs. They probably won't, so they'll rely on a third party daemon for > > > that, or just use uaccess (yay!). But that part is easy > > > > Eventually, desktop environment should talk the interface. (Plus, how > > does HID or BPF craziness help with his?) > > HID helps because we already have the case with game controllers. Steam > and SDL (both widely use), put rules giving uaccess to hidraw nodes on > those controllers. So we finally made the jump and now provide in v6.12 > a new hidraw ioctl to allow logind to revoke the hidraw node. This > should allow us to not give uaccess to those hidraw nodes. > > So in the near future, there will be a portal available, that says > "please give me a fd for this hidraw node", the compositor will then ask > logind to open the file for it and then will pass that fd to the final > application. Once there is a vt-switch, logind will revoke the fd, > meaning that the application will not have access to the device. Yes, you can work around kernel not providing abstractions. But you should not have to. > > > - but then, even if you make everyones happy, the GUI project is > > > actually cross-platform (OpenRGB is, Steam is, SDL is). And what is > > > done on Windows is simple: raw access to the HID device. And the > > > raw > > > > Yes, Windows is a mess. We don't want to emulate them. > > > > > I've been through this exact same process with Input and game > > > controllers, and even for libratbag for configuring gaming devices. In > > > the end, the kernel developer never wins, but the userspace > > > > Yes, we have been in this exact situation. Userland was directly > > accessing mice. It was called "gpm" and we moved away from that for > > good reasons. > > There is a slight difference between mouse support and LEDs on your > keyboard. The former is actually required to bring up the machine and to > use it, the latter is nice to have. But that's not the difference that matters. Linux is not microkernel, and is trying to provide hardware abstractions. (Except for printers, I guess that's because printers are often network devices). Besides, mouse was not required to bring up a machine "back then". Besides, 1) using those keyboards in dark room without backlight is hard, because their labels are translucent and not having enough contrast. 2) rainbow effects make people ill. Note how we have drivers for audio, LEDs, cameras, dunno, iio sensors, none of that is required to bring system up. We need driver for the WMI stuff in kernel. And that point it should be pretty clear proper driver/subsystem should be done. > > > If you want a 100 lines of code program to control your keyboard, with > > > LampArray, you can, as long as you don't require a GUI and don't require > > > to be generic. Just write the values directly on the hidraw device, > > > and > > > > Haha, no. Kernel part was 400+ lines, no way you can parse that in 100 > > lines. > > I'm not saying "parsing", I mean adapt to your use case. If you know > your device, your simple CLI is just writing a static array of bytes to > the hidraw interface. No. Hardware abstraction is kernel work, my application should work everywhere. > > What is relevant that these crazy arrays are not going to be merged, > > and better solution is needed. > > Again, you seemn to miss the point: those crazy arrays should have been > in the firmware from day one. They are not, so the idea is to convert > proprietary protocol into a standard. Then we can start thinking what > comes next. Firmware is what it is and we have to deal with that. (Not to mention that "standard" you are citing is not used by anyone and is ugly as hell. So not even open hardware such as MNT Reform uses it). Best regards, Pavel -- People of Russia, stop Putin before his war on Ukraine escalates.
Attachment:
signature.asc
Description: PGP signature