You are not logged in.
I have a script which swaps the ctrl key and caps lock key (for emacs). Here are the contents of the script:
setxkbmap -option ctrl:swapcaps
It is contained in a script swap-ctrl.sh which I then added to my startup applications on Cinnamon. When I first turn on my machine, the two keys are swapped. However, when I put my laptop on sleep mode and then awaken it, the changes do not persist and I have to run the script manually. However, this does not always happen. Sometimes the changes do persist. If any additional information would be helpful, let me know and I can post it here. Thanks!
Offline
Your keyboard gets de- and re-attached (usually USB related)
You could either put that option into an xorg configlet (so it will automatically apply to all matching keyboards when added) or add it as systemd sleep hook (for the latter you'll have to manage the DISPLAY variable and the calling UID, since the hooks run as root)
Offline
Not sure if this matters, but my keyboard is not attached via USB, it is just the regular keyboard that is on my laptop. I will try the two things that you mentioned though.
Offline
USB is not a plug, but a bus.
Check "lsusb" on whether your keyboard is there.
Offline
This is the output of lsusb:
Bus 002 Device 002: ID 8087:8000 Intel Corp.
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:8008 Intel Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 003: ID 8087:07dc Intel Corp.
Bus 003 Device 002: ID 174f:1474 Syntek
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Also, what exactly do I have to do with the DISPLAY variable and calling UID? I created the sleep hook but since I did not do anything with those, I am getting the following error:
Nov 02 18:32:57 keyblade systemd[15299]: resume@rushil.service: Failed to execute command: Exec format error
Nov 02 18:32:57 keyblade systemd[15299]: resume@rushil.service: Failed at step EXEC spawning /home/rushil/scripts/swap-ctrl.sh: Exec format error
Offline
I actually got the sleep hook to run properly. But even then, it does not work. The keys are not swapped. This is the content of the service file /etc/systemd/system/resume@.service
[Unit]
Description=User resume actions
After=suspend.target
[Service]
User=%I
Type=simple
Environment=DISPLAY=:0
ExecStart=/home/rushil/scripts/swap-ctrl.sh
[Install]
WantedBy=suspend.target
Here is the output of the status:
● resume@rushil.service - User resume actions
Loaded: loaded (/etc/systemd/system/resume@.service; enabled; vendor preset: disabled)
Active: inactive (dead)
Nov 02 18:42:11 keyblade systemd[16224]: resume@rushil.service: Failed to execute command: Exec format error
Nov 02 18:42:11 keyblade systemd[16224]: resume@rushil.service: Failed at step EXEC spawning /home/rushil/scripts/swap-ctrl.sh: Exec format error
Nov 02 18:42:11 keyblade systemd[1]: resume@rushil.service: Main process exited, code=exited, status=203/EXEC
Nov 02 18:42:11 keyblade systemd[1]: resume@rushil.service: Failed with result 'exit-code'.
Nov 02 18:47:33 keyblade systemd[1]: Started User resume actions.
Nov 02 18:47:33 keyblade systemd[1]: resume@rushil.service: Main process exited, code=exited, status=255/n/a
Nov 02 18:47:33 keyblade systemd[1]: resume@rushil.service: Failed with result 'exit-code'.
Nov 02 18:49:20 keyblade systemd[1]: Started User resume actions.
Nov 02 18:50:35 keyblade systemd[1]: Started User resume actions.
Nov 02 18:50:54 keyblade systemd[1]: Started User resume actions.
The errors are when my script was not set up properly. I added the DISPLAY part as you mentioned but do not know what to do with the UID.
Offline
The error message seems pretty straight forward, upload the scriptfile somewhere (no copypasta - it's very much likely malformed)
Offline
Thanks for your help! I was having trouble with the sleep hook but managed to get it working (at least so far) with the xorg configlet. In case anyone needs to see the solution, I created the file /etc/X11/xorg.conf.d/00-keyboard.conf with the contents:
Section "InputClass"
Identifier "system-keyboard"
MatchIsKeyboard "on"
Option "XkbOptions" "ctrl:swapcaps"
EndSection
Offline