Input remapper not working as expected

I installed input-remapper. I was able to create and apply a configuration using the GUI. But each time and log out or my machine goes to sleep, I have to restart the application to apply the configuration again.

How can the changes be permanent, so my mapping continues to work after a log-out or a sleep?

1 Like

See input-remapper - ERROR: Request to autoload ... before a user told the service about their session using set_config_dir · Issue #304006 · NixOS/nixpkgs · GitHub

Here is my solution. I made two services in my Nixos config file :

  systemd.services.StartInputRemapperDaemonAtLogin = {
      enable = true;
      description = "Start input-remapper daemon after login";
      unitConfig = {
          Type = "simple";
      };
      script = lib.getExe(pkgs.writeShellApplication {
          name = "start-input-mapper-daemon";
          runtimeInputs = with pkgs; [input-remapper procps su];
          text = ''
            until pgrep -u pierre; do
              sleep 1
            done
            sleep 2
            until [ $(pgrep -c -u root "input-remapper") -eq 4 ]; do
              input-remapper-service&
              sleep 1
              input-remapper-helper&
              sleep 1
            done
            su pierre -c "input-remapper-control --command stop-all"
            su pierre -c "input-remapper-control --command autoload"
            sleep infinity
          '';
      });
      wantedBy = [ "default.target" ];
  };

  systemd.services.ReloadInputRemapperAfterSleep = {
      enable = true;
      description = "Reload input-remapper config after sleep";
      after = [ "suspend.target" ];
      unitConfig = {
          Type = "forking";
      };
      serviceConfig.User = "pierre";
      script = lib.getExe(pkgs.writeShellApplication {
          name = "reload-input-mapper-config";
          runtimeInputs = with pkgs; [input-remapper ps gawk];
          text = ''
              until [[ $(ps aux | awk '$11~"input-remapper" && $12="<defunct>" {print $0}' | wc -l) -eq 0 ]]; do
                input-remapper-control --command stop-all
                input-remapper-control --command autoload
                sleep 1
              done
         '';
       });
       wantedBy = [ "suspend.target" ];
  };

Now, my mouse buttons are mapped automatically when I log in, and I don’t lose my mapping when my machine comes back from sleep.

When I log in, for a few seconds, I must both move my mouse because otherwise it is not always detected properly, and also avoid clicking mouse buttons for the mapping to work properly.

:heart_eyes: