Folosesc următoarele rânduri în mine ~/.xprofile
pe Ubuntu 20.04 pentru a mapa Majuscule la ESC și Ctrl:
# face CapsLock să se comporte ca Ctrl:
setxkbmap -option ctrl:nocaps
# faceți Ctrl apăsat scurt să se comporte ca Escape:
xcape -e 'Control_L=Escape'
care funcționează perfect pentru mine.
Problema mea este că nu supraviețuiește suspendării/reluării în mod fiabil.Pentru aceasta, am încercat 2 soluții diferite:
1. Prin intermediul unui script capsmap
pune în /usr/lib/systemd/system-sleep/
#!/bin/bash
cazul „$1” în
pre)
#execuția codului ÎNAINTE de a dormi/hiberna/suspenda
;;
post)
#execuția codului DUPĂ reluare
/usr/bin/echo "executarea: /usr/bin/setxkbmap -option ctrl:nocaps"
/usr/bin/setxkbmap -option ctrl:nocaps
/usr/bin/echo „se execută: /usr/bin/xcape -e „Control_L=Escape””
/usr/bin/xcape -e 'Control_L=Escape'
;;
esac
iesirea 0
Am făcut scriptul executabil cu sudo chmod +x capsmap
și poate vedea din jurnalele că este apelat la momentul potrivit:
$ journalctl
...
Okt 09 13:29:12 nb systemd-sleep[401221]: Sistemul a fost reluat.
Okt 09 13:29:12 nb kernel: Bluetooth: hci0: Revizia dispozitivului este 5
Okt 09 13:29:12 nb kernel: Bluetooth: hci0: Pornirea securizată este activată
Okt 09 13:29:12 nb kernel: Bluetooth: hci0: blocarea OTP este activată
Okt 09 13:29:12 nb kernel: Bluetooth: hci0: blocarea API este activată
Okt 09 13:29:12 nb kernel: Bluetooth: hci0: Blocarea remedierii este dezactivată
Okt 09 13:29:12 nb kernel: Bluetooth: hci0: firmware minim build 1 săptămână 10 2014
Okt 09 13:29:12 nb kernel: Bluetooth: hci0: Firmware-ul dispozitivului găsit: intel/ibt-11-5.sfi
Okt 09 13:29:12 nb systemd-sleep[401287]: se execută: /usr/bin/setxkbmap -option ctrl:nocaps
Okt 09 13:29:12 nb systemd-sleep[401288]: Nu se poate deschide afișajul „afișaj implicit”
Okt 09 13:29:12 nb systemd-sleep[401291]: se execută: /usr/bin/xcape -e 'Control_L=Escape'
Okt 09 13:29:12 nb systemd-sleep[401293]: Imposibil de conectat la afișajul X11. Este setat $DISPLAY?
Okt 09 13:29:12 nb systemd[1]: systemd-suspend.service: Reușit.
Okt 09 13:29:12 nb systemd[1]: Suspendare terminată.
Okt 09 13:29:12 nb systemd[1]: Sleep țintă oprit.
Okt 09 13:29:12 nb systemd[1]: Suspendare țintă atinsă.
Okt 09 13:29:12 nb systemd[1]: Suspendare țintă oprită.
...
Cu toate acestea, maparea se aplică doar uneori. Destul de des, Majuscule pur si simplu se comporta normal.
2. Prin intermediul unui serviciu systemd
Am adăugat un fișier de serviciu capsmap.service
la etc/systemd/system/
cu urmatorul continut:
[Unitate]
Descriere=Hartă Capslock la ESC și Ctrl
După=suspend.ţintă
[Serviciu]
Type=onehot
ExecStart=/usr/local/bin/capsmap
TimeoutSec=0
StandardOutput=syslog
[Instalare]
WantedBy=multi-user.target suspend.target
cu dosarul /usr/local/bin/capsmap
la fel de
#!/bin/bash
# face CapsLock să se comporte ca Ctrl:
/usr/bin/echo "executarea: /usr/bin/setxkbmap -option ctrl:nocaps"
/usr/bin/setxkbmap -option ctrl:nocaps
# faceți Ctrl apăsat scurt să se comporte ca Escape:
/usr/bin/echo „se execută: /usr/bin/xcape -e „Control_L=Escape””
/usr/bin/xcape -e 'Control_L=Escape'
iesirea 0
apoi a activat serviciul cu sudo systemctl enable capsmap.service
.
Tot în acest caz, văd cu jurnalctl
că scriptul a fost executat cu succes, dar normal Majuscule comportamentul este încă prezent.
$jurnalctl
...
Okt 09 13:07:56 nb systemd[1]: Suspendare țintă oprită.
Okt 09 13:07:56 nb NetworkManager[1049]: <info> [1633777676.0331] manager: sleep: trezire solicitată (dormire: da activat: da)
Okt 09 13:07:56 nb ModemManager[1137]: sistemul <info> [sleep-monitor] se reia
Okt 09 13:07:56 nb NetworkManager[1049]: <informații> [1633777676.0332] dispozitiv (enp0s31f6): modificarea stării: activat -> negestionat (motiv „în stare de repaus”, starea sys-iface: „gestionat”)
Okt 09 13:07:56 nb systemd[1761]: Bluetooth țintă oprit.
Okt 09 13:07:56 nb upowerd[1344]: tratarea evenimentului de modificare ca add on /sys/devices/pci0000:00/0000:00:14.0/usb1/1-8
Okt 09 13:07:56 nb capsmap[378798]: se execută: /usr/bin/setxkbmap -option ctrl:nocaps
Okt 09 13:07:56 nb systemd[1761]: Bluetooth țintă atins.
Okt 09 13:07:56 nb NetworkManager[1049]: <info> [1633777676.0498] dhcp4 (enp0s31f6): tranzacție DHCP anulată
Okt 09 13:07:56 nb capsmap[378799]: Nu se poate deschide afișajul „afișaj implicit”
Okt 09 13:07:56 nb NetworkManager[1049]: <info> [1633777676.0498] dhcp4 (enp0s31f6): starea schimbată legată -> terminat
Okt 09 13:07:56 nb avahi-daemon[1041]: Se retrage înregistrarea adresei pentru 192.168.178.54 pe enp0s31f6.
Okt 09 13:07:56 nb avahi-daemon[1041]: Se lasă grupul mDNS multicast pe interfața enp0s31f6.IPv4 cu adresa 192.168.178.54.
Okt 09 13:07:56 nb avahi-daemon[1041]: Interfața enp0s31f6.IPv4 nu mai este relevantă pentru mDNS.
Okt 09 13:07:56 nb avahi-daemon[1041]: Se retrage înregistrarea adresei pentru fe80::778b:d324:d55d:a503 pe enp0s31f6.
Okt 09 13:07:56 nb avahi-daemon[1041]: Se lasă grupul mDNS multicast pe interfața enp0s31f6.IPv6 cu adresa fe80::778b:d324:d55d:a503.
Okt 09 13:07:56 nb avahi-daemon[1041]: Interfața enp0s31f6.IPv6 nu mai este relevantă pentru mDNS.
Okt 09 13:07:56 nb systemd[1]: Starea comutatorului de oprire RF a început încărcarea/salvarea.
Okt 09 13:07:56 nb capsmap[378800]: se execută: /usr/bin/xcape -e 'Control_L=Escape'
Okt 09 13:07:56 nb NetworkManager[1049]: <info> [1633777676.0545] manager: starea NetworkManager este acum CONNECTED_GLOBAL
Okt 09 13:07:56 nb capsmap[378805]: Imposibil de conectat la afișajul X11. Este setat $DISPLAY?
Okt 09 13:07:56 nb kernel: kauditd_printk_skb: 9 apeluri inverse suprimate
Okt 09 13:07:56 nb kernel: audit: type=1107 audit(1633777676.068:1737): pid=1047 uid=103 auid=4294967295 ses=4294967295 subj=unconfinedoperation msg='appsignalmor="I_ED" bus="system" path="/org/freedesktop/NetworkManager/ActiveConnection/30" interface="org.fr>
exe="/usr/bin/dbus-daemon" sauid=103 hostname=? adresa=? terminal=?'
Okt 09 13:07:56 nb kernel: audit: type=1107 audit(1633777676.068:1738): pid=1047 uid=103 auid=4294967295 ses=4294967295 subj=unconfinedoperation msg='appsignalmor="I_ED" bus="system" path="/org/freedesktop/NetworkManager/ActiveConnection/30" interface="org.fr>
exe="/usr/bin/dbus-daemon" sauid=103 hostname=? adresa=? terminal=?'
Okt 09 13:07:56 nb audit[1047]: USER_AVC pid=1047 uid=103 auid=4294967295 ses=4294967295 subj=unconfined msg='apparmor="DENIED" operation="dbus_signal="" bus="system" path="" /org/freedesktop/NetworkManager/ActiveConnection/30" interface="org.freedesktop.NetworkManager.Connec>
exe="/usr/bin/dbus-daemon" sauid=103 hostname=? adresa=? terminal=?'
Okt 09 13:07:56 nb audit[1047]: USER_AVC pid=1047 uid=103 auid=4294967295 ses=4294967295 subj=unconfined msg='apparmor="DENIED" operation="dbus_signal="" bus="system" path="" /org/freedesktop/NetworkManager/ActiveConnection/30" interface="org.freedesktop.NetworkManager.Connec>
exe="/usr/bin/dbus-daemon" sauid=103 hostname=? adresa=? terminal=?'
Okt 09 13:07:56 nb systemd[1]: capsmap.service: Reușit.
...