I have this set up as a startup script, but it only sometimes triggers, despite setting a 20-second delay:

#!/bin/bash
sleep 2
xmodmap -e "clear lock"
xmodmap -e "keycode 66 = Return"

I have the startup command set to bash "path/Remap_Caps_Lock_to_Enter.sh". What’s going on? It works when I press the triangle button when it doesn’t work on boot.

  • Artwork@lemmy.world
    link
    fedilink
    English
    arrow-up
    7
    ·
    18 days ago

    The first and foremost I see unclear is the PATH and PWD. That is, the environment. For starters:

    1. Have you tried passing full paths to the executables?
    2. Have you tried recovering the PATH with /usr/bin/env via Shebang?

    What if the “start” script doesn’t find the locations due to missing definitions/locations as a result of different environment if compared to your shell/process you test on?

    • Flagstaff@programming.devOP
      link
      fedilink
      English
      arrow-up
      3
      ·
      18 days ago

      I’m a newb! How do I check boot logs? However, I’m not sure of how relevant those may be (also @Artwork@lemmy.world - I don’t know if that tagged correctly, but I hope so); I just discovered another mysterious piece of the puzzle: it initially works on login, but about 5 min in, something actually undoes the mapping and I have no idea of what; rerunning the script fixes it until the next shutdown.

      Other remapping/expansion tools I use are Keysharp and Espanso, if that helps to know, but I don’t have them interacting with Caps Lock… I would like to more easily manage this just through Keysharp, but Keysharp currently can’t seem to block the native function of Caps Lock from simultaneously occurring.

      Hmm, another thought I had is that I wish startup times would have no maximum delay; Mint Cinnamon’s max is a 100-second delay; why?.. That’s annoying. That alone could possibly solve this (even if just as a workaround).

      • Artwork@lemmy.world
        link
        fedilink
        English
        arrow-up
        3
        ·
        18 days ago

        Yes, tagging is valid, and I got a notification. Thank you!

        I am sorry, but it seems like we have yet to know the actual operating system (OS), distribution, actual paths for the scripts, and Init system (e.g., Systemd, Initd etc.). Did you use Cron, or modify shell configs? We do not know your unique local customized environment, and changes you’ve done, yet, which is required for more precise investigation.

        • Flagstaff@programming.devOP
          link
          fedilink
          English
          arrow-up
          1
          ·
          17 days ago

          I have almost no idea of what half of what you’re saying is; I’ve heard of systemd, initd, and cron, but I don’t know what exactly they are and I don’t know what “shell configs” are.

          I thought it was obvious that I’m running Linux Mint since I posted this in !linuxmint@programming.dev. I’m using Zena, 22.3 on kernel 7.0.0-14, which seems to be the latest one that Update Manager is showing me.

          1. Create the file /home/user/another_folder/remap_caps_to_enter.sh containing the code above
          2. Open Startup Applications and set it to bash the above path as a command
          3. It initially works, but then after a few min, it reverts to native Caps Lock behavior. Manually rerunning the file again makes it work for the rest of the session until I shut down the PC.
          • Artwork@lemmy.world
            link
            fedilink
            English
            arrow-up
            2
            ·
            edit-2
            16 days ago

            I see. Thank you for the details shared!

            I’ve never experienced Linux Mint, but a quick Google shows an option “Caps Lock acts as Return” in the desktop environment (DE) settings. Is that the main idea?


            Regarding the custom script case. Is it possible a system-wide service executes after your boot/startup script, slightly later, remapping it again?

            We may try investigating. For instance, in a new terminal on the very system start, via xev, to try capture the moment it changes:

            xev;
            

            Or manually:

            #! /usr/bin/env bash
            
            declare s='' s2='';
            
            while :;
            do
                s="$( xmodmap -pke | grep -E 'keycode\s+66'; )";
                
                if [[ "$s" != "$s2" ]];
                then
                    printf -- ' [%s] Changed from "%s" to "%s".\n' "$( date -- '+%F_%H-%M-%S'; )" "$s2" "$s";
            
                    s2="$s";
                fi
            
                sleep 1;
            done
            

            I would also try checking out logs:

            journalctl --user -f | grep -E 'settings|keyboard|layout|xkb';
            
            # Or: journalctl -f | grep ...
            
            Edit 2026-06-13
            -- xev -event mapping;
            ++ xev;
            

            Thank you, @Flagstaff@programming.dev (source)

            • Flagstaff@programming.devOP
              link
              fedilink
              English
              arrow-up
              1
              ·
              16 days ago
              xev: unrecognized event mask 'mapping'
              

              I forgot to check these before already applying it… It’s okay… I’ll just tolerate it for now. I may try the other code later but am wiped out… Thanks for all the ideas, though.

              • Artwork@lemmy.world
                link
                fedilink
                English
                arrow-up
                1
                ·
                edit-2
                16 days ago

                Sincere apologies! Apparently, the mapping was in my dated local custom build of the tool…
                Have you tried recording the general xev (with no , without any explicit filtering?

                Your xev build/Man/Info message should list the supported. For example, in v1.2.3, these are supported:

                $ man xev;
                # ...
                -event event_mask  
                When not specified, all events are selected... Available event masks: keyboard mouse expose visibility structure substructure focus property colormap owner_grab_button randr button
                

                Yet, today we found the actual possible culprit, and monitoring the events is probably not required. We know that it will just change, and the issue source should be a separate whole system-wide service that changes your initial change to its own configured, eventually.

                There are many custom key remapping tools, including keyd, but I would try realizing/experiment with the standards first, and I appreciate you for still trying! It may help you in the future.

            • Flagstaff@programming.devOP
              link
              fedilink
              English
              arrow-up
              1
              ·
              17 days ago

              a quick Google shows an option “Caps Lock acts as Return” in the desktop environment (DE) settings.

              That’s a figment. It doesn’t exist. I had checked the list of possible reassignments and was furious that Enter is, like, literally the only reassignment that isn’t in the list. I mean, unless something recently got added, it wasn’t there a month ago. That’d be sweet if it is now…

              I’m not at a PC right now but will check later, thanks.

              • Artwork@lemmy.world
                link
                fedilink
                English
                arrow-up
                2
                ·
                edit-2
                16 days ago

                If I am not mistaken, Linux Mint settings service uses xkeyboard-config.


                Would you mind to add “caps:return” to the list of supported keyboard options?

                Source: https://gitlab.freedesktop.org/xkeyboard-config/xkeyboard-config/-/work_items/121 [2017-04-07]

                -–

                xkeyboard-config 2.43…

                Added caps:return to make the Caps Lock key an additional Return key.

                Source [2024-10-01]

                -–

                <option>
                  <configItem>
                    <name>caps:return</name>
                    <description>Make Caps Lock an additional Return key</description>
                  </configItem>
                </option>
                

                Source

                The actual commit: 6b30f36201b40fddcf28918eb4c96b13a23b42ae


                Yet, I’ve checked in a virtual machine online, and there’s no such, apparently, indeed (sorry).
                However, I believe it’s possible to modify it manually in file /usr/share/X11/xkb/rules/evdev.xml, and I’ve tried quickly the following (after changes to the file, restart the csd-keyboard; e.g., by killing it). Would it work in your case (I would also try rebooting after)?:

                Screenshot

                • Flagstaff@programming.devOP
                  link
                  fedilink
                  English
                  arrow-up
                  2
                  ·
                  edit-2
                  8 days ago

                  Oh, sweet, huh, nice. Thanks a ton for the research; I totally didn’t think to go this route. I’ll try it when I next can!

                  Update: So, @Artwork@lemmy.world (I don’t know if this will notify you), unfortunately, I did get around to finally trying it but even though the XKB option is picked, it doesn’t seem to actually do anything despite rebooting… but I sure appreciate you poking around and trying; I didn’t even know that file existed or could be modified.