How to remap right alt to control on ubuntu

From razwiki
Revision as of 23:13, 6 January 2022 by Razzi (talk | contribs) (Created page with "<pre> $ cat /etc/interception/udevmon.yaml - JOB: intercept -g $DEVNODE | ralt2ctrl | uinput -d $DEVNODE DEVICE: EVENTS: EV_KEY: [KEY_RIGHTALT] </pre> <pre> $ cat...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
$ cat /etc/interception/udevmon.yaml
- JOB: intercept -g $DEVNODE | ralt2ctrl | uinput -d $DEVNODE
  DEVICE:
    EVENTS:
      EV_KEY: [KEY_RIGHTALT]
$ cat ~/forks/ralt2ctrl/ralt2ctrl.c
#include <stdio.h>
#include <stdlib.h>

#include <unistd.h>
#include <linux/input.h>

#define DEBUG 1

int read_event(struct input_event *event) {
    return fread(event, sizeof(struct input_event), 1, stdin) == 1;
}

int write_event(const struct input_event *event) {
    if (fwrite(event, sizeof(struct input_event), 1, stdout) != 1) {
        exit(EXIT_FAILURE);
    }
}

int main() {
    struct input_event input;
    setbuf(stdin, NULL);
    setbuf(stdout, NULL);

    while (read_event(&input)) {
        // printf("read event. %d is EV_MSC, %d is EV_KEY\n", EV_MSC, EV_KEY);
        // printf("read event %d\n", input.type);
        if (input.type == EV_MSC && input.code == MSC_SCAN) {
            continue;
        }

        if (input.type == EV_KEY && input.code == KEY_RIGHTALT) {
            // printf("ok u did it");
            // fprintf(stderr, "GOT RIGHTALT");
            struct input_event lctrl = {.type = EV_KEY, .code = KEY_RIGHTCTRL, .value = input.value};
            write_event(&lctrl);
            continue;
        }

        write_event(&input);
    }
}
gcc ralt2ctrl.c -o ralt2ctrl && sudo cp ralt2ctrl /usr/local/bin/
sudo add-apt-repository ppa:deafmute/interception
sudo apt install interception-tools
sudo systemctl start udevmon.service

TODO try this all from scratch... I don't trust it.

TODO clean up c code