Linux: Dvorak-Qwerty Keyboard.. feat. CopyQ and xdotool.

왜 드보락을 익혔을까.. 뭘 잘난척을 하느라 그랬었을까. 영어로 타자칠 일이 뭐 그리 많았다고..
그러면서 또 세벌식은 왜..?

30여년전 어느 날. 정확하게는 1990년도(91년?) 어느 날. 큰 맘을 먹고 영어자판을 Dvorak 으로 바꿔버렸다. 아마도 한메타자교사로 연습을 했던 듯. 당시에도 그런 말이 있었지만, 사실 Dvorak 자판을 써보면 편한 느낌이 든다. QWERTY 는 왼손에 조금 무리가 오는 듯한데, 드보락엔 그런게 없다.

다만.. 드보락을 쓰면 몇가지 어려움이 있다. 이 어려움은 MS 윈도우를 쓸 때 가장 크게 다가오고, macOS 에서가 제일 편하다. 리눅스는, 그냥 쓸만한 정도.

그 중 제일 짜증나는 점은 바로 단축키다. 그 중에서도 단축키계의 Jack/Queen/King 인 복사/붙여넣기/잘라내기는 한 손으로 입력하기가 거의 불가능하다. 그나마 쓰임새가 적은 Ctrl-X 는 가능하지만, 나머지는 손가락이 20cm 되지 않는 한 불가. X 는 Dvorak 에선 Qwerty B 위치이기에 가능하지만, C 는 I 위치, V 는 . 위치에 있기 때문에, 적어도 왼손 한 손 타이핑은 할 수가 없다.
그래서 macOS 에선 Dvorak-Qwerty 라는 자판을 제공해서, 조합키(Modifier Keys)와 함께 누를 경우는 QWERTY 로 작동하게끔 해준다. MS 윈도우와 리눅스엔 이런 기능이 없다.


리눅스를 쓰면서, ‘없으면 어떻게든 만든다’가 신조(信條)가 되었다. (神助가 아니다.)

발단 : 시작은 Autokey 로

그동안은, autokey 를 이용해서 이 문제를 슬쩍 비껴갔었다. Hotkey 를 드보락/쿼티로 주고(예를 들어 복사는 Ctrl-J), 명령은 keyboard.send_keys(<ctrl>+c) 를 할당하면 원하는 효과를 낼 수 있었다.
그런데.. 언젠가부터 불편함이 느껴졌으니.. 이 작업을 하고 나면 윈도우 포커스가 이동돼 버리는 문제가 있었다. 이게 KDE 책임인지, autokey 쪽인지 그동안은 깊게 생각해보지 않고 대충 지내오다가, 며칠 전 시험해 보고나서 원흉(?)을 잡아낼 수 있었다.

흠.. Autokey Issue 게시판을 보면, Focus 문제를 언급한 글타래가 꽤 된다. 허나, 내 문제와 딱 부합되는 글은 못찾았고, 적절한 해결책도 발견하지 못했다. 다만, 거기서 xdotool 에 대한 정보를 얻었고, 그 결과로 이 방법을 생각하게 됐다.

전개/위기 : Focus 문제?

autokey 를 쓴게 언제부터였나.. 이글루스를 뒤져보니, 2010년이었나보다. 2014년에는 좀 더 정리된 글을 올리기도 했다. 그리고 그 글에, 2015년에 내용을 추가했는데, 거기에 xdotool 이 언급돼 있다. 이 방식을 당시에 사용해봤었고, xbindkeys 였나, xdotool 이었나 제작자에게 문의도 했었는데, 답을 얻지는 못했었다. 사실, 연구를 좀 더 하고 싶었는데.. 그게 벌써 시간이 이렇게 흘러버렸네.

포커스 문제란 이런거다.

저장(Ctrl+S) 키를 재정의하기 위해서, autokey 에서 Ctrl+O 를 단축키(Hotkey)로 하고, 그 키를 누르면 Ctrl+S 를 보내주는 명령을 만들었다. 프로그램을 쓰다가 Ctrl+O 를 누르고 저장을 한 뒤, 끝내려고 Alt+F4 를 눌렀는데, 아무 반응이 없고, 당연히 그 창이 꺼지질 않는다. 포커스가 어딘가로 이동했기 때문이다. 뭔가 내가 알 수 없는 묘한 문제가 발생하여 이런 상황이 돼 버렸다. 해결하려면 포커스를 다시금 내가 있던 창으로 수동으로 옮겨줘야만 한다.
불필요한 손동작이 필요하게 된다는 의미.
즉, Autokey 를 통해 Hotkey 를 호출하면, 포커스가 작업을 수행한 해당 창에 머물지 않고, 어딘가로 이동해버리는 문제가 생긴다. (다시 말하지만, 이게 KDE 문제인지 Autokey 문제인진 모른다. GTK 에서도 이런 문제가 생기는지도 모른다. GTK 를 떠난지 오래기에 기억에 없다.)

절정/결말 : KDE Plasma 설정을 거쳐 CopyQ 로.

첫 시도로 KDE Plsama 자체 기능을 이용하는 방법을 써봤다. KDE 설정에서 단축키를 할당, 교체해줄 수가 있다.

늘 그렇지만, 제대로 작동하지 않는다. ‘복사’ 항목에 Ctrl+J 를 추가했지만, 아무런 반응이 없다.

두번째로, 위 그림 2번 열에 있는 ‘사용자 정의 바로 가기’를 이용해봤다.

원하는 명령을 스크립트로 만들고, 그걸 ‘트리거’를 누르면 실행되게끔(복사는 Ctrl+J) 해봤는데, 이게 어쩔 때는 되고, 또 어쩔 때는 안되는 이상한 현상이 있다. 따라서 즐거운 컴퓨터 환경이 되질 못한다.

그리하여!!!!! CopyQ 를 생각해봤다.


CopyQ 도 쓴지 꽤 오래됐다. 예전엔 여기에 스크립트를 입력해서 각종 자동화 기능을 이용하기도 했었는데.. (스크립트로 뭘 했었는지 기억이 나질 않아서 찾아봤다.) 아무튼, 찾아보니 2015년쯤부터 썼나보다. 그렇다면 한 7년.. 생각보단 오래되진 않았네. 요즘은 그냥 클립보드 관리자로만 쓰고 있긴 했는데.

xdotool 은 원하는대로 동작했다. 이런 식으로 명령을 날려주면 된다.

xdotool key ctrl+c

이러면 ctrl+c 가 수행된다. 다만, 이걸 CopyQ 에서 실행했을 때 현재 열린 창(Active Window)로 잘 전달이 될까하는 걱정이 있었으나 기우였다. 아무 문제가 없다.

결론부터 말하면, CopyQ 로 모든 문제가 해결됐다. Focus 문제도 당연히 없다.

CopyQ 에선, 이런 식으로 설정해주면 된다.

첫 줄, sh: 는 Shell 을 뜻한다. bash: 를 써도 되고, zsh: 를 써도 된다. python 을 원한다면 python, perl 이라면 perl 등등.

이렇게 해주면, Ctrl+J 를 눌렀을 때 xdotool key ctrl+c 가 실행이 되고, 결국 ‘복사’작업이 이뤄진다.

그런데, 여기에 왜 keyup 이벤트를 추가했나?
물론, 내가 임의로 하지는 않았고.. 도움을 받았다.

Berry Tsakala 님의 주장(?)대로, Workaround 를 적용하지 않으면, 뭔지 모를 오류가 발생한다. 작업이 늦게 되기도 하고, 안되기도 하고.
방법은 두가지라는데, 내 경우 sleep 보단 keyup 이벤트가 더 잘 되는 듯 했기에, 저렇게 설정했다.

저런 식으로 원하는 단축키를 변경해주면 된다. 다만, 이렇게 되면, 결국 모든 Ctrl 키를 재할당해야 하는 상황이 온다. 서로 충돌하는 경우가 생기기 때문이다. 따라서, 가능하면 모든 키(Ctrl 만)를 재정의해주면 속 편하게 쓸 수 있는 환경을 만들 수 있다.

다만 한가지. 살짝 편법이 필요한 키도 있다. (아직까지 시험 중이라서, 어떤 다른 묘수가 떠오를지는 모르겠는데..)

붙여넣기는, 위 명령 형식에 한가지가 더 필요하다.

sh:
# Key Up
xdotool keyup ctrl+k
# ctrl v 보내기
xdotool key ctrl+v

# 아래를 넣어주면, 연속해서 ctrl k 를 타격(?)해도 계속 붙여넣기가 가능.
xdotool keydown ctrl

가끔, ctrl+v 를 연속으로 입력해야할 경우가 있다. 이럴 때는 보통, Ctrl 키는 누른 상태에서 v 만 눌렀다 뗐다를 반복하게 되는데, 위와 같은 경우, 첫번째 키입력만 작동하고, 두번째 부터는 그냥 일반 키(위 상황에선 k)가 입력되는 상황이 발생했다.
따라서, 임의로 ctrl keydown 이벤트를 보내주면 ctrl 를 누른채로 Dvorak K 키(결국 QWERTY V 키 위치)를 누르고 있어도 계속 붙여넣기가 된다.
사실 왜 이렇게 작동하는지는 모르겠다. 그냥 저렇게 하면 되지 않을까 싶어서 넣어준건데, 생각대로 작동하여 나도 놀라는 중.


아직까지는 Ctrl C/V/X/F 만 시험 중이지만, 큰 문제는 없었다. 키도 늘리고, 좀 더 시험해보면 뭔가 또 요상한 문제가 나올 수도 있겠으나.. 그건 또 그 때가서 해결해보기로.

아무튼! 맘은 훨 가볍네.

Author: 아무도안

안녕하세요. 글 남겨주셔서 고맙습니다.