Windows에서는 AutoHotKey를 사용해서 반복되는 키 작업을 반자동화할 수 있습니다. Ubuntu에서도 사용할 수 있는 도구가 있는데 바로 AutoKey입니다. Ubuntu AutoKey 설치 방법과 사용법을 함께 알아보겠습니다.
목차
Ubuntu AutoKey 설치
Ubuntu AutoKey는 2가지 버전으로 나와있는데, gtk 버전으로 설치하려면 autokey-gtk를, qt 버전으로 설치하려면 autokey-qt를 설치하면 됩니다. 기능이나 버전은 2023년 2월 7일 기준 0.95.10으로 모두 동일합니다.
sudo apt install autokey-gtk # GTK UI를 원하는 경우
sudo apt install autokey-qt # QT UI를 원하는 경우
ShellScript주의사항
Ubuntu AutoKey는 Wayland와 호환되지 않는 X11 어플리케이션이니, 꼭 X11로 로그인해서 사용하시길 바랍니다. Wayland를 비활성화 하는 방법은 simplescreenrecorder non-X11 window system 관련 문제 해결 방법(Wayland 비활성화) 문서에도 나와 있으니, 문서 확인 후 Ubuntu 운영체제에서 Wayland를 먼저 비활성화 한 후에 이용하시기 바랍니다.
그리고 우분투 프로그램 설치 및 삭제 방법 3가지(apt&dpkg, snap, flatpak)도 정리해 놓은 글이 있으니 필요한 분은 확인해 보시면 되겠습니다.
AutoKey 튜토리얼
튜토리얼에서는 직접 AutoKey를 이용해서 스크립트를 작성해 볼 것입니다. 하나씩 다 설명해 봐야 이해하기 버거워 그만 두고 싶어지는 게 우리들 심리죠. 하나씩 직접 해 보면서 기능들을 익혀보도록 하겠습니다.
AutoKey 실행
Super Key를 누른 후 AutoKey를 검색해서 실행합니다.
폴더 생성
실행하면 아래와 같은 화면이 뜹니다. 우리는 새로운 폴더를 만들거니까, 툴바 제일 왼쪽에 있는 New 버튼을 누른 후 팝업 메뉴에서 Folder를 눌러 줍니다.
사용자 지정 폴더(디렉토리)
저는 ~/autokey-works라는 디렉토리를 만들어서 해당 디렉토리에 관련 스크립트를 저장해 보겠습니다. 디렉토리 이름이 그대로 앱 내의 폴더명이 됩니다.
기본 폴더 사용하기(Use Default)
만약 별도로 폴더를 만들지 않고 그냥 사용하실 분은 우측 상단에 Use Default 버튼을 눌러주시면 됩니다. Use Default 버튼을 누르는 경우에는 ~/.config/autokey/data에 생성하는 폴더가 추가로 만들어집니다.
직접 만든 디렉토리로 하든 Use Default를 통해 기본 디렉토리에 만들든 간에, 나중에 컴퓨터를 포맷할 일이 있을 때에는 스크립트를 계속 쓰는 거라면 꼭! 백업하시기 바랍니다. 안 그럼 다 날아가겠죠.
또는 git을 사용해서 해당 스크립트들을 git repository에 보관해 놓으면 포맷 걱정은 안해도 되겠습니다.
구(Phrase) 추가
워드 프로세서 등의 문서 작성 시에 기본적으로 문구가 정해져 있고, 해당 문구를 자주 사용하기 때문에 항상 어떤 문서에서 복사해서 붙여넣기 해 오셨나요? 아니면 매번 일일이 입력하고 계셨을까요?
구문을 추가할 폴더를 선택한 다음 New 버튼을 누르고 팝업 메뉴에서 Phrase를 선택합니다. 저는 Republic of Korea의 약어로 rok를 사용할 것입니다.
오른쪽 화면에 그림과 같이 Republic of Korea를 입력해 보겠습니다.
위의 그림에 있는 Abbreviations(약어)의 Set 버튼을 눌러 줍니다.
약어 설정 창에서 화면 좌측의 Add를 누르고 rok를 입력해 준 후 엔터를 칩니다. OK를 눌러서 창을 닫습니다.
그 다음엔 저장을 해 줍니다. 저장이 돼야만 해당 약어가 먹힙니다. rok라고 입력 후 Spacebar를 눌러주면 Republic of Korea가 입력됩니다.
그런데 이 좋은 기능에 한 가지 문제가 있습니다. 그냥 한글을 입력하면 처리가 되지 않는 문제인데, 이건 문서 제일 마지막에서 다루겠습니다.
스크립트 추가
스크립트를 추가할 폴더를 선택한 다음 New 버튼을 다시 누르고 팝업 메뉴에서 Script를 선택합니다.
스크립트 이름을 물어봅니다. 원하는 스크립트 이름을 적으시면 됩니다. 저는 “반복작업“이라는 이름을 사용해 보겠습니다. 해당 디렉토리 아래에 반복작업.py 파일이 생기네요. 맞습니다. Python 문법을 사용해서 스크립트를 작성하게 됩니다. 화면 오른 쪽에 스크립트 작성 창이 생깁니다.
엑셀에서 아래 Cell로 이동해서 F2를 누르고 Home키를 눌러서 제일 앞글자 하나를 지우고, 엔터를 입력하는 과정까지 진행해 보겠습니다.
keyboard.send_keys("<f2>")
time.sleep(0.3)
keyboard.send_keys("<home>")
time.sleep(0.3)
keyboard.send_keys("<delete>")
time.sleep(0.3)
keyboard.send_keys("<enter>")
Pythontime.sleep()으로 잠깐 잠깐 쉬게 해 줘야지 안 그러면 해당 작업이 끝나기도 전에 다른 동작을 해 버려서 엉망이 될 수 있습니다. 자동화 해서 편하게 쓰는 만큼 요런 건 고려해 주셔야 합니다.
위의 동작을 50번 반복하고 싶다면 다음과 같이 해 주면 되겠죠?
def delete_first_char():
keyboard.send_keys("<f2>")
time.sleep(0.3)
keyboard.send_keys("<home>")
time.sleep(0.3)
keyboard.send_keys("<delete>")
time.sleep(0.3)
keyboard.send_keys("<enter>")
time.sleep(0.3)
for i in range(50):
delete_first_char()
PythonAutoKey 단점: 한글 입력
이제 위에서 문제점으로 지적했던 한글 입력에 대한 얘길 해보겠습니다.
한글 입력을 하고 싶을 때가 가장 불편한 상황입니다. 예시를 통해서 살펴보겠습니다. 일단 “2023년 2월 3일” 형식으로 오늘의 날짜가 자동으로 입력되게 하고 싶은 경우에 대한 처리를 해 보겠습니다.
yyyymmdd = system.exec_command("date +%Y%m%d")
y = yyyymmdd[:4]
m = int(yyyymmdd[4:6])
d = int(yyyymmdd[6:])
keyboard.send_keys(f"{y}sus {m}dnjf {d}dlf")
Python라인 1에서는 시스템 명령어 date를 이용해서 현재 날짜를 얻어옵니다.
라인 2에서는 년도, 라인 3은 월, 라인 4는 일을 각각 변수 y, m, d에 각각 저장합니다.
라인 5에서 할 얘기가 좀 많습니다. 그냥 f”{y}년 {m}월 {d}일”이라고 왜 안 해놓은거지 싶은 생각이 들죠? 그건 바로 이 AutoKey라는 녀석이 저걸 순수하게 키를 타이핑하는 개념으로 인식하기 때문입니다. 그래서 그냥 한글을 쓰면 입력이 안 됩니다.
라인 5에 들어있는 “<shift>+ ” 문자열은 shift + space를 의미하며 제 컴퓨터에서는 한영 전환의 의미입니다. 여러분이 사용하는 한영 전환키로 한영 키를 사용하고 있다면 키보드나 여러분의 설정에 따라 차이가 있긴 하겠지만 대개는<alt_gr>으로 작동할 가능성이 있습니다.
어쨌든 간에 한글 입력시에는 한영 전환을 하고 영문으로 해당 키를 하나씩 눌러서 입력해 줘야 합니다. 이 지점이 한글을 섞어서 쓰는 경우에는 매우 번거로운 지점이긴 합니다. 2벌식 기준으로는 위의 코드와 같이 하면 됩니다만, 3벌식 390 이용자라면 한글 입력 모드에서 라인 5를 아래와 같이 변경해서 사용해야 위의 코드와 동일한 결과가 나오게 됩니다. 왜냐하면 3벌식 390 한글 입력 모드에서 숫자키는 문자를 입력하는 데 사용하거든요.
keyboard.send_keys(f"<shift>+ {y}<shift>+ hes <shift>+ {m}<shift>+ j9tw <shift>+ {d}<shift>+ jdw")
Python이번엔 한글과 영문을 번갈아 써야 하는 상황을 가정해 보겠습니다. “대한민국 Republic of Korea”를 입력해 보겠습니다. 2벌식이며 한영 전환을 shift + space로 하는 경우에는 아래와 같이 사용하면 됩니다.
keyboard.send_keys("eogksalsrnr <shift>+ Republic of Korea")
Python3벌식 390을 사용하며 한영 전환을 한글키로 하는 경우에는 아래와 같이 사용하면 됩니다.
keyboard.send_keys("urmfsidskbx <alt_gr>Republic of Korea")
Python이 부분에 대한 문제를 해결해 보고 싶군요. 하지만 지금은 소개하는 자리니 이정도 선에서 설명을 마치겠습니다.
추가 설명
Phrase에서 한글 입력하기
2벌식을 사용하는 경우에 아래와 같이 구문을 작성해 주면 “대한민국 Republic of Korea”가 입력됩니다. 특수키에 대한 처리가 Phrase에서도 작동하니까 활용하면 됩니다.
eogksalsrnr <shift>+ Republic of Korea
윈도우 필터 기능
abbreviations에서는 약어를 설정하는 것이었으며, hotkey는 단축키를 지정할 수 있었습니다. 마지막의 Window Filter가 뭔지 궁금하셨던 분들 계시죠? Window Filter는 해당 단축키나 약어가 아무데서나 작동하지 않고 특정 윈도우에서만 작동하도록 설정할 수 있는 부분입니다.
Window Filter의 Set 버튼을 눌러주면 아래 그림과 같은 Set Window Filter 창이 열립니다. Detect Window Properties 버튼을 눌러줍니다.
저는 IntelliJ IDEA 창을 선택했습니다. 아래와 같은 창이 다시 열립니다. 윈도우 클래스를 사용할 것인지 아니면 윈도우 이름을 사용할 것인지 물어봅니다. 대개의 경우 특정 문서에서만 해당 단축키를 쓸 건 아니니까 Window class를 선택해 주고 OK 버튼을 누릅니다.
창의 클래스명이 자동으로 Regular expression to match에 들어갔습니다.
OK를 눌러주면 윈도우 필터 설정이 끝날까요? 아닙니다. 저장 꼭! 해주셔야 설정이 끝납니다. 이제 해당 단축키는 jetbrains-idea.jetbrains-idea 창에서만 작동합니다.
Top Bar 활용
AutoKey는 한 번 실행하고 난 다음에는 창을 닫아도 메모리에 상주해 있습니다. 상단 Top Bar에서 AutoKey의 아이콘을 확인할 수 있습니다.
정리
Ubuntu AutoKey 설치와 사용법, 그리고 각종 기능과 한글 입력 이슈까지 살펴봤습니다.
우분투와 같은 리눅스에서 사용할 수 있는 AutoHotKey 같은 녀석인데 한글 입력이 마음대로 되지 않는다는 점은 다소 아쉬움이 있지만, 한글 입력이 필요없는 곳이라면 마음 편히 사용해도 되겠습니다. 한글 입력을 해야 하는 경우라면 공을 들여서 Phrase나 Script를 작성해야 하긴 하겠지만요.
그리고 Python 언어로 스크립트를 작성할 수 있기 때문에 Python을 사용하는 분이라면 사용하기가 너무 어렵거나 하지는 않을 것입니다. My Phrases나 Sample Scripts 폴더에는 관련 예제들이 있으니까 참고하시면 도움이 될 것입니다.
관련자료
AutoKey의 Github 페이지에 소스코드가 제공되고 있으며, Documentation에서는 보다 자세한 사용법을 알아볼 수 있습니다.
AutoKey의 스크립트에서 작성하는 특수 키 관련 코드는 소스 코드를 참고해 주세요.