Tôi đang sử dụng các dòng sau trong ~/.xprofile
trên Ubuntu 20.04 để ánh xạ Phím Caps Lock đến THOÁT và Điều khiển:
# làm cho CapsLock hoạt động như Ctrl:
setxkbmap -tùy chọn ctrl:nocaps
# làm cho phím Ctrl được nhấn nhanh hoạt động giống như Escape:
xcape -e 'Control_L=Escape'
mà làm việc hoàn toàn tốt cho tôi.
Vấn đề của tôi là nó không tồn tại khi tạm dừng/tiếp tục một cách đáng tin cậy.Đối với điều này, tôi đã thử 2 giải pháp khác nhau:
1. Thông qua kịch bản bản đồ
bỏ vào /usr/lib/systemd/system-sleep/
#!/bin/bash
trường hợp "$1" trong
trước)
#thực thi mã TRƯỚC KHI ngủ/ngủ đông/treo
;;
bưu kiện)
# thực thi mã SAU KHI tiếp tục
/usr/bin/echo "đang thực thi: /usr/bin/setxkbmap -option ctrl:nocaps"
/usr/bin/setxkbmap -tùy chọn ctrl:nocaps
/usr/bin/echo "đang thực thi: /usr/bin/xcape -e 'Control_L=Escape'"
/usr/bin/xcape -e 'Control_L=Escape'
;;
thoát hiểm
thoát 0
Tôi đã làm cho tập lệnh có thể thực thi được với sudo chmod +x capmap
và có thể thấy từ nhật ký rằng nó được gọi vào thời điểm thích hợp:
$ tạp chí
...
Okt 09 13:29:12 nb systemd-sleep[401221]: Hệ thống đã hoạt động trở lại.
Okt 09 13:29:12 nb kernel: Bluetooth: hci0: Phiên bản thiết bị là 5
Okt 09 13:29:12 nb kernel: Bluetooth: hci0: Khởi động an toàn được bật
Okt 09 13:29:12 nb kernel: Bluetooth: hci0: Đã bật khóa OTP
Okt 09 13:29:12 nb kernel: Bluetooth: hci0: Đã bật khóa API
Okt 09 13:29:12 nb kernel: Bluetooth: hci0: Khóa gỡ lỗi bị tắt
Okt 09 13:29:12 nb kernel: Bluetooth: hci0: Bản dựng firmware tối thiểu 1 tuần 10 2014
Okt 09 13:29:12 nb kernel: Bluetooth: hci0: Found device firmware: intel/ibt-11-5.sfi
Okt 09 13:29:12 nb systemd-sleep[401287]: thực thi: /usr/bin/setxkbmap -option ctrl:nocaps
Okt 09 13:29:12 nb systemd-sleep[401288]: Không thể mở màn hình "màn hình mặc định"
Okt 09 13:29:12 nb systemd-sleep[401291]: thực thi: /usr/bin/xcape -e 'Control_L=Escape'
Okt 09 13:29:12 nb systemd-sleep[401293]: Không thể kết nối với màn hình X11. $HIỂN THỊ đã được đặt chưa?
Okt 09 13:29:12 nb systemd[1]: systemd-suspend.service: Thành công.
Okt 09 13:29:12 nb systemd[1]: Đã hoàn tất Đình chỉ.
Okt 09 13:29:12 nb systemd[1]: Đã dừng mục tiêu Ngủ.
Okt 09 13:29:12 nb systemd[1]: Đã đạt mục tiêu Tạm dừng.
Okt 09 13:29:12 nb systemd[1]: Đã dừng mục tiêu Tạm dừng.
...
Tuy nhiên, ánh xạ chỉ đôi khi được áp dụng. Khá thường xuyên, Phím Caps Lock chỉ cư xử như bình thường.
2. Thông qua dịch vụ systemd
Tôi đã thêm một tập tin dịch vụ capmap.service
đến vv/systemd/system/
với nội dung như sau:
[Đơn vị]
Mô tả=Bản đồ Capslock tới ESC và Ctrl
Sau=treo.mục tiêu
[Dịch vụ]
Loại=oneshot
ExecStart=/usr/local/bin/capsmap
Thời gian chờSec=0
StandardOutput=nhật ký hệ thống
[Cài đặt]
WantedBy=đa người dùng.đích tạm ngưng.đích
với tập tin /usr/local/bin/capsmap
như
#!/bin/bash
# làm cho CapsLock hoạt động như Ctrl:
/usr/bin/echo "đang thực thi: /usr/bin/setxkbmap -option ctrl:nocaps"
/usr/bin/setxkbmap -tùy chọn ctrl:nocaps
# làm cho phím Ctrl được nhấn nhanh hoạt động giống như Escape:
/usr/bin/echo "đang thực thi: /usr/bin/xcape -e 'Control_L=Escape'"
/usr/bin/xcape -e 'Control_L=Escape'
thoát 0
sau đó kích hoạt dịch vụ với Sudo systemctl kích hoạt capsmap.service
.
Cũng trong trường hợp này, tôi có thể thấy với tạp chí
rằng tập lệnh đã được thực thi thành công, nhưng bình thường Phím Caps Lock hành vi vẫn còn.
$journalctl
...
Okt 09 13:07:56 nb systemd[1]: Đã dừng mục tiêu Tạm dừng.
Okt 09 13:07:56 nb Trình quản lý mạng[1049]: <thông tin> [1633777676.0331] người quản lý: ngủ: yêu cầu đánh thức (ngủ: có bật: có)
Okt 09 13:07:56 nb ModemManager[1137]: <thông tin> hệ thống [sleep-monitor] đang hoạt động trở lại
Okt 09 13:07:56 nb Trình quản lý mạng[1049]: <thông tin> [1633777676.0332] thiết bị (enp0s31f6): thay đổi trạng thái: đã kích hoạt -> không được quản lý (lý do 'đang ngủ', trạng thái sys-iface: 'được quản lý')
Okt 09 13:07:56 nb systemd[1761]: Bluetooth mục tiêu đã dừng.
Okt 09 13:07:56 nb upowerd[1344]: coi sự kiện thay đổi là add on /sys/devices/pci0000:00/0000:00:14.0/usb1/1-8
Okt 09 13:07:56 nb capsmap[378798]: thực thi: /usr/bin/setxkbmap -option ctrl:nocaps
Okt 09 13:07:56 nb systemd[1761]: Đã đạt mục tiêu Bluetooth.
Okt 09 13:07:56 nb NetworkManager[1049]: <info> [1633777676.0498] dhcp4 (enp0s31f6): hủy giao dịch DHCP
Okt 09 13:07:56 nb capsmap[378799]: Không thể mở màn hình "màn hình mặc định"
Okt 09 13:07:56 nb NetworkManager[1049]: <info> [1633777676.0498] dhcp4 (enp0s31f6): giới hạn trạng thái đã thay đổi -> xong
Okt 09 13:07:56 nb avahi-daemon[1041]: Rút bản ghi địa chỉ cho 192.168.178.54 trên enp0s31f6.
Okt 09 13:07:56 nb avahi-daemon[1041]: Rời khỏi nhóm phát đa hướng mDNS trên giao diện enp0s31f6.IPv4 với địa chỉ 192.168.178.54.
Okt 09 13:07:56 nb avahi-daemon[1041]: Giao diện enp0s31f6.IPv4 không còn phù hợp với mDNS.
Okt 09 13:07:56 nb avahi-daemon[1041]: Bản ghi địa chỉ rút tiền cho fe80::778b:d324:d55d:a503 trên enp0s31f6.
Okt 09 13:07:56 nb avahi-daemon[1041]: Rời khỏi nhóm phát đa hướng mDNS trên giao diện enp0s31f6.IPv6 với địa chỉ fe80::778b:d324:d55d:a503.
Okt 09 13:07:56 nb avahi-daemon[1041]: Giao diện enp0s31f6.IPv6 không còn phù hợp với mDNS.
Okt 09 13:07:56 nb systemd[1]: Bắt đầu Tải/Lưu Trạng thái Công tắc Tiêu diệt RF.
Okt 09 13:07:56 nb capsmap[378800]: thực thi: /usr/bin/xcape -e 'Control_L=Escape'
Okt 09 13:07:56 nb NetworkManager[1049]: <info> [1633777676.0545] manager: Trạng thái NetworkManager hiện là CONNECTED_GLOBAL
Okt 09 13:07:56 nb capsmap[378805]: Không thể kết nối với màn hình X11. $HIỂN THỊ đã được đặt chưa?
Okt 09 13:07:56 nb kernel: kauditd_printk_skb: 9 cuộc gọi lại bị chặn
Okt 09 13:07:56 nb kernel: audit: type=1107 audit(1633777676.068:1737): 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.fr>
exe="/usr/bin/dbus-daemon" sauid=103 tên máy chủ=? thêm =? thiết bị đầu cuối =?'
Okt 09 13:07:56 nb kernel: audit: type=1107 audit(1633777676.068:1738): 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.fr>
exe="/usr/bin/dbus-daemon" sauid=103 tên máy chủ=? thêm =? thiết bị đầu cuối =?'
Okt 09 13:07:56 nb kiểm tra[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 tên máy chủ=? thêm =? thiết bị đầu cuối =?'
Okt 09 13:07:56 nb kiểm tra[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 tên máy chủ=? thêm =? thiết bị đầu cuối =?'
Okt 09 13:07:56 nb systemd[1]: capsmap.service: Thành công.
...