Reviewed-on: #4 Co-authored-by: Timo Behrendt <t.behrendt@t00n.de> Co-committed-by: Timo Behrendt <t.behrendt@t00n.de>
47 lines
2.5 KiB
Markdown
47 lines
2.5 KiB
Markdown
# UsbMakroBoard
|
|
|
|
## Kudos
|
|
|
|
For info that with "EVIOCGRAB" the keyboard events can be consumed exclusively by one application: https://stackoverflow.com/questions/29942421/read-barcodes-from-input-event-linux-c/29956584#29956584
|
|
|
|
## Arguments
|
|
|
|
```
|
|
-c <path to config>
|
|
```
|
|
|
|
## Configuration
|
|
|
|
The configuration can be provided by either specifying a config file path via the `-c` parameter. If no parameter is provided, the default config path under `$HOME/.config/UsbMakroBoard.yaml` is used.
|
|
|
|
Find the config schema in [schemas/config.schema.json](./schemas/config.schema.json) as well as a default config in [config.yaml](./config.yaml).
|
|
|
|
## Allowing non-root access to the device
|
|
|
|
By default, accessing input devices requires root privileges. However, it's possible to allow a regular user to access a specific input device by creating a udev rule:
|
|
|
|
1. Identify the device's vendor and product IDs. You can do this by running `lsusb` in the terminal and looking for your device.
|
|
This may looke like this where `195d` is the `vendor_id` and `6008` is the `product_id`:
|
|
```bash
|
|
# lsusb
|
|
Bus 003 Device 005: ID 195d:6008 Itron Technology iONE Falcon 20 RGB
|
|
```
|
|
|
|
1. Create a new udev rule. Open a new file in the `/etc/udev/rules.d/` directory. The filename should end with `.rules`, for example `90-input.rules` (the number determins the order in which the rules are loaded. It is generally recommended to chose higher numbers for changes that are relevant for the user-space).
|
|
|
|
In the new file, write a rule that matches your device and sets the mode to `0666` (read and write permissions for everyone). Replace `vendor_id` and `product_id` with your device's IDs from the first step.
|
|
|
|
```bash
|
|
SUBSYSTEM=="input", ATTRS{idVendor}=="vendor_id", ATTRS{idProduct}=="product_id", MODE="0666"
|
|
```
|
|
|
|
3. Reload the udev rules with the command `sudo udevadm control --reload-rules && sudo udevadm trigger`.
|
|
|
|
Now, every time the device is connected, it will be accessible by all users. The rule can be made more specific to only make the device accessible to a certain user or user group. You can use the `OWNER`, `GROUP`, and `MODE` parameters in the udev rule. For example, to restrict access to the user `username` and the group `usergroup`, you can use:
|
|
|
|
```bash
|
|
SUBSYSTEM=="input", ATTRS{idVendor}=="vendor_id", ATTRS{idProduct}=="product_id", OWNER="username", GROUP="usergroup", MODE="0660"
|
|
```
|
|
|
|
This will give read and write permissions to the user and/or the group, and no permissions to others.
|