A key remapping daemon for Linux

Posted by joooscha 6 days ago

Counter69Comment33OpenOriginal

Comments

Comment by sherr 4 days ago

It's a shame that the title doesn't say what the s/w is : keyd.

I actually use keyd on my laptops because it seems to do everything I need and is easy to get going without any fuss. So thank you Raheman Vaiya.

Comment by garciansmith 4 days ago

I find this kind of keyboard remapping essential when using a laptop now that I'm used to using an external keyboard with QMK firmware at my desk (though these days I use Kmonad).

Comment by LelouBil 3 days ago

My framework 16 has a QMK firmware and can be remapped with complex setups.

But I didn't find any cool use case for it, what do you use it for ?

Comment by analog_daddy 4 days ago

Oh my god! I hate using anything that is not my keyboard anymore. Laptops are not ‘lap’tops for me since I will just be slow without my keyboard. The split keyboard with many thumb keys is tough to achieve on laptop.

Comment by garciansmith 4 days ago

Yeah, that is the downside to making your keyboard your own. Anytime I use someone else's computer I always spend a few seconds wondering why I just turned caps lock on and wrote a bunch of gibberish.

Comment by m463 4 days ago

I had a friend with a kinesis dvorak keyboard.

Happily he would put it in "guest" qwerty mode when I had to type on it. It was hard enough typing in a cereal bowl.

Comment by ta8903 4 days ago

The caps lock thing always happens with me haha, the funnest thing is other people are unable to understand hitting caps lock is more ergonomic than right ctrl.

Comment by sandreas 3 days ago

Others remap it to ESC...

Comment by yummybrainz 3 days ago

ESC on tap, CTRL on hold is the way!

Comment by resonious 4 days ago

Japanese keyboard layout + kmonad is how I cope.

Comment by procaryote 4 days ago

This is one of many things that used to be easier before wayland

You can get pretty far with just the xkbd definions though, although you need root to reconfigure it.

A bit ironically, the easiest way I've found to create xkbd definions is to start an X11 server, reconfigure your xmodmap+xcompose, and export the current xkbd settings. Xmodmap is much easier to edit than editing xkbd directly.

Comment by OJFord 4 days ago

> You can get pretty far with just the xkbd definions though, although you need root to reconfigure it.

You can put them in user XDG_CONFIG_HOME – you might be right that you need root once to configure it to look there though. (And that might depend on how distro/package manager ships it.)

Comment by neosenate 4 days ago

This is fantastic!

I wish window/app selection in Wayland was better. On my Mac I use a combination of Phoenix and Hyperkey to capture capslock + key combinations, (e.g. cap+f for Firefox) which when pressed, either open an app of my choice it not already open, or bring it to the front of the stack.

Last time I looked into it window and app selection in Wayland just didn’t work.

Comment by KetoManx64 3 days ago

I use https://github.com/houmain/keymapper to achieve the same thing, Meta + W: open or switch through existing Firefox windows, Meta + Z: open or switch through existing Terminal Windows, etc.

It works on Wayland from my understanding, but I'm using X11 as my daily driver.

Comment by lostmsu 4 days ago

What are the differences between this and https://github.com/sezanzeb/input-remapper ?

Comment by mkolassa 4 days ago

From what I can see in their readme, this is basically a key remapping utility without any of the advanced macro functionality that Input Remapper has.

For example, I can create a macro in Input Remapper that is bound to the F12 key and will press keys 1, 2, and 3 in order at a certain rate and repeat for as long as I hold down that F12 key.

This utility would just allow me to remap a key to another without that repeat or timing functionality.

Comment by jvillasante 4 days ago

I've used `keyd` in the past and found it to be very fast and good. I have moved to `xremap` since, as an Emacs user being able to do this https://github.com/xremap/xremap/blob/master/example/emacs.y... make everything much much better.

Can something like that be done with `keyd`?

Comment by petters 4 days ago

> a hand tuned input loop written in C that takes <<1ms

Yes, I would certainly expect much less than 1ms. Perhaps 1µs should be the goal?

Comment by porridgeraisin 4 days ago

I have been using this for a while and it's great. Here's my config

  [main]
  # Maps capslock to escape when pressed and control when held.
  capslock = overload(control, esc)
  # Maps left meta to alt+f1 when tapped alone for start menu
  leftmeta = overload(meta, macro(A-f1))

  # Makes a shift layer
  [shift]
  leftshift = capslock
  rightshift = capslock
  # i.e, when some shift is pressed down, the other   shift being pressed will yield a capslock.
  # So, press lshift+rshift for capslock

Comment by themafia 4 days ago

I've done nearly the same thing and have called it 'keyd' as well.

It's a little more inspired by a "djb" style design. Instead of having a configuration file, the program takes a single argument which is meant to be a directory. Then, if code 113 is pressed, it looks for an executable file named '113' in the given directory and if it exists will execute it. If not found it then tries '113+', then on release it will try '113-'.

Comment by nilsherzig 4 days ago

Great software. Especially the "lettermod" feature. It allows you to configure a key to switch to a layer / secondary actions if held for some time, but only if no other key was pressed within some time before. So secondary key actions don't happen while the user is actively typing a text. This makes it very easy to add homerow mods (adding Ctrl, Alt, etc to the homerow keys) without the struggle of accidently triggering them.

Comment by Refreeze5224 4 days ago

This is fantastic. Works perfectly right off the bat. I have so much trouble just getting capslock to be control consistently in Linux, and this made it easy.

Comment by ceuk 3 days ago

I've been using kmonad[1] on my laptop for years which looks similar. Highly recommend it, it's brilliant.

[1] https://github.com/kmonad/kmonad

Comment by CrociDB 4 days ago

I've been using `keyd` for a while, it's pretty good. I even wrote a text explaining how I use it: https://crocidb.com/post/my-journey-trying-to-get-rid-of-cap...

Comment by mijoharas 4 days ago

Does anyone know how this compares to interception-tools?[0]

[0] https://gitlab.com/interception/linux/tools

Comment by innocentoldguy 4 days ago

I use Karabiner-Elements on macOS, and finding keyd was a godsend on Linux. I cannot deal with standard keyboard mappings and the lack of hold/tap keys.

Comment by joooscha 6 days ago

I used this to remap the space key to be a modifier key and thought it might be useful for some.

Comment by rreyes1979 4 days ago

I use it to remap my mouse keys. Works like a charm on Fedora Silverblue.

Comment by jcalvinowens 3 days ago

I love keyd, it uses uinput so it works on the vtty too.

Comment by smallmancontrov 4 days ago

Thanks keyd! You replaced a number of utterly shameful and janktacular python scripts.

Comment by zarflax 4 days ago

Now I can finally reimplement spacebar heating!

Comment by lolive 3 days ago

Is it a competitor of Kanata ?

Comment by alexhornby 4 days ago

keyd is great, I use it to have mac-style bindings