HHKB Fn+ESC suspend 진입 방지

Linux에서 Happy Hacking Keyboard의 Fn key를 누르고 있다가 실수로 ESC key를 눌러서 Fn + ESC 조합이 되어 sleep에 진입하는 경우가 종종 있는데, 한 참 작업하는 중에 컴퓨터가 sleep에 들어가 버리면 흐름이 다시 잡기가 여간 힘들다.

Fn+ESC는 WakeUp에 해당하는 Keycode 값(151)이 keyboard로 부터 올려지는 것이어서 상위단에서 이 상황을 따로 구분해 주기는 어렵다. HHKB의 DIP switch를 변경해 주거나 해당 키를 처리하지 않도록 환경 설정을 해주어야 하는데, DIP switch를 변경하면 다른 설정이 영향을 받을 것 같아서 환경 설정으로 수정해 보기로 했다.

Fn+ESC에 의해 발생되는 sleep key는 먼저 logind에서 처리되고 Window manager (GNOME)에 전달되는데, logind에서 이 키를 받았을 때 무시하도록 하려면 다음과 같이 /etc/systemd/logind.conf를 수정해 준다.

/etc/systemd/logind.conf


HandleSuspendKey=ignore
HandleSuspendKeyLongPress=ignore
HandleHibernateKey=ignore
HandlePowerKey=ignore
HandlePowerKeyLongPress=ignore
HandleRebootKey=ignore

GNOME 추가 수정

Hyprland를 사용하는 경우에는 위의 설정만으로도 되지만, GNOME은 추가로 전원에 관련된 동작을 수정해 주어야 한다. Terminal에서 gsettings의 전원 동작을 아래와 같이 설정해 준다.

gsettings set org.gnome.settings-daemon.plugins.power power-button-action 'nothing'
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-type 'nothing'

이제 시스템을 재부팅하고 Fn+ESC를 누르면 해당 키가 무시되어 suspend에 진입하지 않게 된다.

Image file의 partition 크기 늘리기

이미지파일에서 주어지는 파티션의 크기가 너무 작은 경우 더이상 파일을 복사 할 수 없는 경우가 종종 생긴다.

fdisk 명령어로 보면 이미지 파일의 파티션정보가 보이는데, 이 경우 기본적으로 5.5GB의 공간이 Linux partition (ext4)으로 할당되어 있다.

이 크기를 늘리고 싶다면 truncate로 image file의 크기를 조절하고, parted로 원하는 파티션에 할당해 주면된다.

# Image의 크기를 1GB 늘림
truncate -s +1G ./raspios_inc_7gb.img

# 두번째 파티션(ext4)에 100%를 할당
parted raspios_inc_7gb.img resizepart 2 100%

다시 한번 fdisk를 실행해보면 이전 5.5GB에서 6.5GB로 1GB 늘어난 파티션이 두번째인 Linux partition에 적용된 것을 확인할 수 있다.

Raspberry Pi Pico, Visual Studio Code 개발환경 설정

Raspberry Pi Pico로 이것 저것 해보려고 놀려고 개발 환경을 설정해 보았다. 참고한 문서들에는 Thonny IDE를 기준으로 설명된 것들이 많았으나 vscode에서도 Pico가 잘 지원되고 있어서 이것을 기준으로 환경을 설정했다.

Raspberry Pi Pico vs Arduino Uno

Pico의 생김새는 Arduino Nano와 유사하지만, 기능 측면에서는 Uno와 견줄만 하다.

Raspberry Pi Pico (RP2040)Arduino Uno (ATmega328P)
Processor CoreDual-core ARM Cortex-M0+ (32-bit)Single-core ATmega328P (8-bit)
Clock SpeedUp to 133 MHz16 MHz
RAM (SRAM)264 KB2 KB
Flash Memory2 MB (off-chip)32 KB (on-chip)
ProgrammingMicroPython, C/C++, Arduino IDEC/C++ (Arduino sketches)
가격배송비 포함 7천원 정도 3만원 정도

Raspberry Pi Pico Extension

Extensions항목에서 raspberry pi로 검색하면 Pico를 위한 공식 extension을 볼 수 있다.

이것을 설치하고 나면 Sidebar에 Raspberry Pi Pico를 위한 icon들이 추가된다.

새로운 프로젝트 생성

Sidebar의 Raspberry Pi Pico Project를 선택하면 새로운 프로젝트를 생성할 수 있는 창이 뜨는데, 설정 테스트를 위해서 여기에서 MicroPython 프로젝트를 하나 생성해 본다.

프로젝트가 생성되고 Pico의 LED(GPIO 25번)을 1초 간격으로 toggle하는 예제 코드가 추가된다.

MicroPython UF2 설치

Micro-Controller를 위한 MicroPython을 실행하기 위해서는 UF2 file을 설치해 주어야 하는데, 설치하는 과정은 생각보다 어렵지 않다.

우선 Pico용 MicroPython download page에서 UF2 파일을 개발 host에 다운로드 받아둔다. 그 다음 Pico에 있는 BOOTSEL 버튼을 누른 상태에서 개발 host와 연결된 UBS cable을 연결하면 Pico가 저장장치 모드로 인식되면서 파일을 탐색기에서 파일을 복사할 수 있는 상태로 인식된다.

다운로드 받아둔 UF2 파일을 인식된 RPI-PR2에 복사하면, 복사가 완료된 후 Pico가 자동으로 reboot되는데, 부팅하면서 vscode의 상태표시줄에 “Pico Connected”가 표시되기 REPL을 실행 할 수 있는 창이 뜬다.

제일 아래에 있는 상태표시 줄을 보면 “Pico Connected”옆에 “Run” 버튼이 있는데, 이것을 이용해서 현재 창에 떠 있는 MicroPython code를 실행할 수 있다.

참고로, 일반적인 Python code를 실행할 때 쓰는 버튼은 동작 하지 않는다.

File Upload 및 실행

LED 동작이 확인되었다면 해당 파일을 Upload 해서 Pico에서 동작하도록 할 수 있다. 명령창에서 “upload”를 검색하면 현재의 파일을 upload 하거나 프로젝트 전체를 upload하는 두개의 메뉴가 아래와 같이 보인다.

Upload가 완료 되었다면 Pico를 개발 host에 연결된 USB가 아닌 전원 (USB 충전기 혹은 battery)으로 연결하고 재부팅 하면 LED가 동작하는 것을 볼 수있다.

주의: 개발 host에 Pico 연결하면 REPL이 자동 실행되면서 upload된 파일의 실행이 중지된다. Upload한 파일의 동작을 확인하고 싶다면 반드시 개발 host가 아닌 전원으로 연결해서 부팅하도록 한다.