수정 필요함
맥에서 쓰던 것처럼 한영키를 CapsLock으로 사용하고 싶었고,사용하고 있는 외장 키보드에 Super_L와 Alt_L이 뒤 바뀌어있는 문제를 해결하고 싶었다.
(키보드가 맥 모드 였어서 윈도우 모드로 변경하면서 해결됨)
처음에는 input-remapper라는 프로그램을 통해 해결할 수 있었다.
하지만 컴퓨터를 껐다 켜거나, 잠겼다 켤 때마다 비밀번호를 새로 입력해야 하는 불편함이 있었다.
그래서 새로운 방법을 찾아보기로 했다.
목표
1. 한영키를 F6으로 바꾸고, CapsLock을 F6으로 매핑하기
(한영키를 바로 CapsLock으로 바꿀 수 있지만, 가끔 대문자로 고정이 되는 문제가 있어서 이 방법으로 함)
2. 외부 키보드에서만 Super_L과 Alt_L을 바꿔주기
3. 컴퓨터 켜면 알아서 적용되고 비밀번호 입력할 필요 없어야 함
4. 더 이상 신경 쓸 필요 없어야 함
해결
한영->F6
먼저 설정-> IBUS한글 설정에서 한영 토글키에 F6을 추가해 줍니다
리맵(xremap)
xremap을 사용해 리맵해 줍시다
- Fast - Xremap is written in Rust, which is faster than JIT-less interpreters like Python.
- Cross-platform - Xremap uses evdev and uinput, which works whether you use X11 or Wayland.
- Language-agnostic - The config is JSON-compatible. Generate it from any language, e.g. Ruby, Python.
xremap의 컨셉은 이러합니다
디바이스, 어플리케이션별로 키 매핑을 따로 설정할 수 있습니다
시스템의 아키텍처와 DE를 확인한 후, Release에서 바이너리 파일을 다운받아줍니다.
GUI가 아닌 config.yml로 직접 설정해주어야 합니다.
yml양식은 깃허브에서 확인할 수 있습니다
xremap바이너리 파일이 들어있는 곳에서 config.yml을 작성해 줍니다
#config.yml
modmap:
- name: CapsLock to F6
remap:
CapsLock: F6
# 다른 device에만 적용하고 싶을 때
# - name: Change Alt and Super
# remap:
# Super_L: Alt_L
# Alt_L: Super_L
# device:
# only: 'Rainy 75-2'
모든 경우에 CapsLock을 F6으로 바꿔주고
device 가 Rainy 75-2인 경우에 Super_L과 Alt_L을 바꿔줍니다
name은 아래 나올 키 변경을 설명하는 글이고
remap에 변경하고 싶은 키를 적어줍니다
원래 키: 바꿀 키
특정 디바이스에 적용하고 싶은 경우 디바이스를 따로 적어줍니다
only, not,, 배열 등 여러 방법으로 지정할 수 있습니다
디바이스명에는 아래의 내용을 적을 수 있습니다.
- the full path of the device
- the filename of the device
- the device name
- a substring of the device name
파일 이름, 디바이스명을 잘 모르겠으면 xremap의 시작 로그에서 확인해 볼 수 있습니다
일반 사용자는 evdev와 uinput에 sudo 없이 사용할 수 없기 때문에
일반 사용자가 sudo 없이 사용하기 위해 터미널에서 아래 명령어를 입력해 줍니다
YOUR_USER에 사용자명을 입력해 줍니다
sudo gpasswd -a YOUR_USER input
echo 'KERNEL=="uinput", GROUP="input", TAG+="uaccess"' | sudo tee /etc/udev/rules.d/input.rules
설정파일을 전부 작성했다면 xremap의 argument로 config.yml을 넣어주어 같이 실행합니다
실행이 꺼지면 remap도 같이 꺼지게 됩니다
-> 프로그램을 백그라운드에새 실행하도록 해야 하고 컴퓨터가 켜지면 함께 실행되도록 해야 합니다
systemd에서 실행되기 위해, xremap이 백그라운드에서 실행되는 쉘스크립트가 실행되는 service 만들기..??????????
컴퓨터 켜면 실행되게 하기
/usr/local/etc/remap 안에 xremap과 config.yml을 넣어줍니다
sudo mkdir /usr/local/etc/remap
sudo cp xremap config.yml /usr/local/etc/remap
systemd에서 실행될 쉘스크립트를 만들어줍니다
#!bin/bash
/usr/local/etc/remap/xremap /usr/local/etc/remap/config.yml
/user/local/bin 으로 옮겨주고 실행권한을 줍니다
sudo cp remap.sh /usr/local/bin
sudo chmod +x /usr/local/bin/remap.sh
service unit file을 만들어줍니다
sudo vim /etc/systemd/system/remap.service
[Unit]
Description=Remap Service
After=network.target
[Service]
Type=simple
ExecStartPre=/bin/bash -c "sleep 5"
ExecStart=/bin/bash /usr/local/bin/remap.sh
Restart=on-failure
RestartSec=10
KillMode=process
[Install]
WantedBy=default.target
sudo chmod 640 /etc/systemd/system/remap.service
systemctl에서 확인해 줍니다
systemctl status remap.service
새로운 unit file을 만들었으니 systemd에게 다시 불러오라고 하고, enable로 바꿔줍니다
service가 startup때 실행되기 위해선 enable을 해주어야 합니다.
sudo systemctl daemon-reload
sudo systemctl enable remap
키 매핑하는 게 생각보다 복잡하다
더 쉬운 방법이 있는데 내가 모르는 건가
맥이면 카라비너로 뚝딱인디
https://github.com/xremap/xremap
https://help.skysilk.com/support/solutions/articles/9000162390--basic-how-to-start-a-program-or-script-on-linux-automatically-on-boot-with-systemd
https://www.howtogeek.com/687970/how-to-run-a-linux-program-at-startup-with-systemd/