koodev

macOS 키보드에서 이상한 문자만 입력될 때 (åß∂ƒ...)

Computer

사용 중인 맥북(16인치, M1pro)에서 키보드 타이핑 시 이상한 문자가 입력되는 현상이 발생했다. 좀 더 정확히는 오른쪽 option 키가 항상 눌려진 것처럼 타이핑이 되고 있었다. 즉, asdf 를 입력하면 åß∂ƒ 가 입력된다. 또한 마우스 커서와 관련된 다른 동작도 오른쪽 option 키가 눌려진 영향을 받았다.

처음에는 입력기 오류인가 해서 System Preferences - Keyboard - Input Sources 를 확인해 보았는데 정상이었고, 재부팅을 해 보았는데도 그 현상은 사라지지 않고 있었다. 성급한 마음에 재부팅을 하게 되면 더 곤란한 경우가 생기는데 영어입력이 안 되어서 로그인이 안 되기 때문이다. 본인처럼 재부팅을 먼저 했을 경우에는 다시 재부팅한 다음 Magic Key 를 입력하여 현상을 해결할 수 있다. 위의 링크 설명처럼 PC를 종료시킨 다음 다시 켤 때 CMD + Option + P + R 키를 눌러서 부팅하면 현상이 해결된다.

https://discussions.apple.com/thread/3065163

원인은 불명확하지만 하드웨어 또는 시스템적으로 오른쪽 option 키가 눌려진 상태가 유지되고 있는 것인데 인터넷 검색을 통해 재부팅 없이 이를 해결하는 방법을 찾을 수 있었다.

https://discussions.apple.com/thread/4815782

System Preferences - Accessibility - Keyboard 로 이동한다. "Enable Sticky Keys" 를 체크한다. 그 다음 문제가 되는 오른쪽 option 키를 두 번 누른다. 그러면 화면 우측 상단에 해당 키가 고정(또는 고정해제) 되었다고 표시된다. 고정된 경우 짙게, 해제된 경우 흐리게 표시되는데, Sticky Key 가 해제된 상태로 만든다. 그리고 "Enable Sticky Keys" 체크를 해제하면 된다.

DOSBox/macOS 관련 정리

Computer

재택근무시 수시로 월급루팡 모드가 발동되고 있는 요즈음 가볍게 기분전환 할 거리를 찾고 있었다. 피아노연주는 은근히 시간과 집중력을 너무 소모하고, 스팀게임을 하려니 시간과 컴퓨팅자원을 너무 빼앗기게 되고, 모바일게임 역시 눈이 피로해져서 별로 끌리지 않던 중, 고전게임을 창모드로 돌리면 어떨까 해서 DOSBox 라는 가상화 유틸을 가볍게 알아보았다. 대부분의 레퍼런스가 윈도우 환경이라서 macOS 환경에서의 구동에 대해서 정리한다.

다운로드 및 설치

dosbox.com 의 다운로드 페이지로 가서 'Mac OS X' 버전을 다운로드 받는다. dmg 파일을 실행하면 해당 이미지가 마운트되는데, DOSBox 파일을 드래그해서 /Applications 폴더로 옮기면 설치가 된다.

라이브러리(게임폴더) 관리 및 마운트

나는 홈 폴더에 ~/DosBox 폴더를 만들고, 그 밑에 게임(유틸) 폴더를 주르륵 만들어 놓았다. 그리고 DOSBox 쉘 안에서는 ~/DosBox 를 c 드라이브로 마운트하여 사용하고 있다. 마운트 명령어는 아래와 같다.

mount c ~/DosBox

이렇게 하면 DOSBox 쉘에서 ~/DosBox 내용들을 c 레이블로 접근할 수 있다.

CD롬 마운트

어떤 게임들은 CD를 사용하기도 한다. CD 마운트는 아래와 같이 imgmount 명령어를 사용한다.

imgmount d <cue 파일> -t iso

이렇게 하면 d 레이블에 해당 cue 파일이 마운트된다.

Dosbox.conf

DOSBox 쉘을 열 때마다 실행되는 프로파일 인터페이스가 Dosbox.conf 이다. macOS 에서는 이 파일이 없고, '~/Library/Preferences/DOSBox 버전 Preferences' 라는 파일로 되어 있다. 이 파일에서 [autoexec] 섹션 아래에 다음과 같이 마운트 등 설정을 입력해준다.

[autoexec]
# Lines in this section will be run at startup.
# You can put your MOUNT lines here.

mount c ~/DosBox

# For genesis2
imgmount d c:\GENESIS2\DOSBOX\CD\GENESIS2.cue -t iso

마우스 Escape 및 단축키 등

DOSBox 쉘 창에 포커스가 가면 마우스 이벤트를 먹어버리는데, ctrl + F10 을 누르면 마우스 이벤트를 macOS 윈도우쉘로 다시 가져올 수 있다.

CPU 성능(사이클)은 ctrl + F11 로 느리게, crtl + F12 로 빠르게 조정할 수 있다.

참고

'Computer' 카테고리의 다른 글

Ubuntu 18.04 XRDP 설정  (0) 2021.12.31
youtube-dl 포멧 옵션  (0) 2021.10.12
macOS에서 동영상 단일 프레임 캡쳐  (0) 2021.02.01
애플워치 앱 강제종료  (0) 2020.10.20
iPad Sidecar USB로 연결  (0) 2020.08.07

macOS에서 동영상 단일 프레임 캡쳐

Computer

4K 동영상 프레임을 선택적으로 캡쳐할 일이 있었는데, QuickTime 플레이어Preview 를 조합하여 프로그램 작성 없이 해결할 수 있었다. 스크린 캡쳐를 할 경우 원본 프레임의 해상도가 손상될 수 있어 이 방법을 사용하는게 확실하다.

  1. QuickTime 플레이어로 대상 동영상을 연다.
  2. 캡쳐할 프레임으로 이동(Seek)한다. Seek 바와 화살표 키를 사용하여 프레임 단위 이동이 가능하다.
  3. Command-C (카피)를 누른다.
  4. Preview 앱으로 이동하여 Command-N 을 누른다. 그리고 원하는 이미지 포멧으로 저장하면 끝.

그런데 어떤 동영상은 QuickTime 플레이어에서 편집 명령(Command-C)이 비활성화 되어 있는 경우가 있다. 이런 경우 iMovie를 사용하여 프레임 캡쳐가 가능하다(iMovie를 쓰면 프레임 탐색을 좀 더 세밀하게 할 수 있지만, 시스템 리소스를 더 쓰는 듯 하다).

  1. iMovie 로 새 프로젝트를 생성하고, "Import Media" 로 대상 동영상을 불러온다.
  2. 동영상이 로드되면 아래와 같이 동영상 미디어 아이템을 하단의 프레임 편집 창으로 드래그하여 끌어 내린다.
  3. 프레임 편집 창에서 캡쳐할 프레임을 선택한다. 우측에 철도모양 슬라이더로 네비게이션 스케일을 조정할 수 있고, 트랙패드로 슬라이드/클릭하여 손쉽게 프레임을 지정할 수 있다.
  4. 상단 툴바에서 내보내기 버튼을 누른 후 "Save Current Frame" 을 클릭해서 이미지로 내보낼 수 있다.

참고:

'Computer' 카테고리의 다른 글

youtube-dl 포멧 옵션  (0) 2021.10.12
DOSBox/macOS 관련 정리  (0) 2021.08.17
애플워치 앱 강제종료  (0) 2020.10.20
iPad Sidecar USB로 연결  (0) 2020.08.07
Ubuntu 16.04 apt 'E: Unmet dependencies' 에러  (2) 2020.01.23

macOS 윈도우 스크린캡쳐 알파 그림자 없애기

Computer

macOS에서 윈도우를 선택해서 스크린 캡쳐를 할 때 (CMD+SHIFT+4 한다음에 SPACE) 윈도우 주변의 알파 그림자까지 캡쳐가 되서 캡쳐파일 용량도 커지고 불필요한 마진이 생겨서 불편했는데, 이 알파 그림자를 제외하고 캡쳐하는 방법이 있었다.

CMD+SHIFT+4 한다음에 SPACE 누르고 윈도우를 선택해서 마우스 클릭을 할 때, OPTION 키를 누른 상태에서 마우스 클릭을 하면 윈도우 주변 알파 그림자를 제외하고 캡쳐가 된다.

참고:  How do I take a screenshot without the shadow behind it?

macOS 앱에서 dylib 이 로드되지 않는 문제

Programming

Xcode로 macOS 앱을 만들다가 외부 라이브러리를 사용할 일이 있어서 dylib을 링크하려 했는데, 해당 dylib을 로드할 수 없다는 런타임 에러메시지가 나왔다. 그 프로젝트는 이미 a 파일을 링크해서 쓰고 있었고, a 파일 때와 같은 방법으로 dylib을 셋팅하고 있었다.

생각해보니 dylib은 추가적으로 해 주어야 하는 일이 있었다. a 파일은 심볼이 타겟 바이너리에 복사되어 들어가기 때문에 그냥 쓰면 되는 것이었고, dylib은 so 같은것이기 때문에 타겟 머신(macOS 컴퓨터)에 dylib을 설치하거나(/usr/lib 같은데다), 아니면 번들로 앱 패키지에 심어 넣어야 하는 것이다.

설치를 하는 것은 번거로우니까 스킵하고, 번들로 심는 방법을 적어본다. Xcode의 Navigator 에서 프로젝트 파일을 누른 다음, General - Frameworks, Libraries, and Embedded Content 항목을 살펴보자. 안에 테이블에서 해당하는 dylib 파일의 Embed 속성에서 'Embed & Sign' 옵션을 선택하면 끝.

참고로 설치하는 방법은 install_name_tool 이라는 명령어를 사용한다. 다음 링크 참조: Embedding .dylib libraries in your application bundle.

참고

macOS Mission Control 에서 윈도우 사라지는 현상

Computer

마침내 오랬동안 해결되지 않았던 macOS Mission Control 문제의 (임시) 해결 방법을 알아냈다.

제목 그대로 macOS의 Mission Control(트랙패드에 손가락 네개를 올려놓고 쓸어 올리는 동작)을 동작시키면 원래는 데스크탑에 띄어놓은 윈도우창이 모두 보여야 하는데 다 없어지는 현상이다. 처음에는 집에서 사용하는 MacBook Pro에서만 발생하는 현상 같았는데 인터넷 검색을 해 보니 iMac에서도 일어나는 현상으로 보아 macOS 공통 버그인듯 하다. 내 경우 macOS 버전은 Mojave 10.14.6 이다.

명확한 원인은 알 수가 없었고, 특정 프로그램(들)이 Mission Control에 버그를 일으키는 것 같다. 내 경우는 Steam 앱이 문제였다. Steam 앱을 종료시키고 나니 Mission Control이 정상 동작하는 것을 확인했다. 그렇지만 다시 Steam 앱을 실행시켰을 때 문제가 발생하지 않은 것으로 보아 다른 복합적인 원인이 있는 것 같다. 그리고 Steam 뿐만 아니라 다른 앱들도 잠재적인 문제가 있을 수 있다. 아래 링크에서는 Cross DJ 라는 앱이 말썽을 일으켰다고 한다.

참고: https://discussions.apple.com/thread/8515674

macOS Dock 아이콘 이동하기

Computer

Herculacina 님과 아드님께 감사

조금 슬픈 이야기이다. 언젠가부터 macOS의 Dock(바탕화면에서 바로가기 아이콘들이 모여있는 길다란 영역)의 아이콘이 움직이지 않았다. 트랙패드를 꾹 눌러 포스터치를 해봐도 요지부동이었다. macOS가 업데이트되면서 그새 뭐가 바뀌었나 하여 인터넷을 뒤져보니 글쎄, Dock의 아이콘을 누르고 '아주 빨리' 움직이면 된단다. 잘 쓰다가 이렇게 되었다는 것은 내 몸과 정신의 민첩함이 예전 같지 못하다는 뜻이겠지.

참고: https://discussions.apple.com/thread/3817000

macOS에 emacs ggtags 설치 및 설정

Programming

macOS에 emacs ggtags 설치 및 설정하는 과정을 정리한다. 성공한 환경은 아래와 같다.

  • macOS Version: macOS Sierra 10.12.6 (16G29)
  • emacs Version: GNU Emacs 25.1.1 (x86_64-apple-darwin13.4.0, NS appkit-1265.21 Version 10.9.5 (Build 13F1911)) of 2016-09-21

1. 설치

1.1 Homebrew로 ruby, ctags 설치

brew install --upgrade ruby
brew install --HEAD ctags

1.2 Homebrew로 GNU Global 설치

brew install global --with-exuberant-ctags

1.3 pygments 플러그인 설치

sudo pip install pygments
sudo pip3 install pygments

pygments는 Syntax Highlighter이다. ctags가 레퍼런스 탐색 기능을 제공하지 않기 때문에 Global에서 pygments 플러그인을 사용하도록 설정해 주어야 한다.

2. 설정

2.1 pygments 설정

시스템 환경 변수(.bashrc 등)에 아래와 같이 설정해준다.

export GTAGSCONF=~/.globalrc
export GTAGSLABEL=pygments

즉, Emacs에는 아래와 같이 해주면 된다.

(setenv "GTAGSCONF" (concat (expand-file-name "~") "./globalrc"))
(setenv "GTAGSLABEL" "pygments")

만일 ~/.globalrc 파일이 없다면, /usr/local/share/gtags/gtags.conf 파일을 복사하여 ~/.globalrc 로 만든다. 그리고 :ctagscom= 을 검색하여 아래와 같이 바꿔준다(2개 정도 나옴).

exuberant-ctags|plugin-example|setting to use Exuberant Ctags plug-in parser:\
  :tc=common:\
  :ctagscom=/usr/local/opt/ctags/bin/ctags:\

...

pygments-parser|Pygments plug-in parser:\
  :ctagscom=/usr/local/opt/ctags/bin/ctags:\

2.2 Emacs 설정

(and
 (require 'ggtags nil t)
 (message "ggtags initializing...")
 (autoload 'ggtags-mode "ggtags"
   "Minor mode for browsing source code using GLOBAL" t))

(eval-after-load 'ggtags
  '(progn
     (add-hook 'c-mode-common-hook
               (lambda ()
                 (when (derived-mode-p 'c-mode 'c++-mode 'java-mode 'objc-mode)
                   (ggtags-mode 1))))
     (add-hook 'python-mode-hook (lambda () (ggtags-mode 1)))

     ;; Set GTAGS variables
     (setenv "GTAGSCONF" (concat (expand-file-name "~") "/.globalrc"))
     (setenv "GTAGSLABEL" "pygments")

     (define-key ggtags-mode-map (kbd "C-c C-f") 'ggtags-find-file)
     (define-key ggtags-mode-map (kbd "C-c g") 'ggtags-grep)
     ))

(provide 'koodev-ggtags)

3. 실행

프로젝트 폴더로 가서 소스파일을 하나 열고 M-x ggtags-find-tags-dwim 을 실행하면 루트 폴더의 위치를 묻는데, 프로젝트 루트를 지정해주면 잠시 후 G* 파일들이 생성된다.

단축키 등의 자세한 정보는 다음 링크를 참고한다: https://github.com/leoliu/ggtags

4. 기타

ImportError: No module named pygments 이런 에러가 뜨는 경우, 우선은 pygments 플러그인을 잘 설치했나 확인해보고, 실행 환경에서 python이 어느 경로로 잡혀있는지 확인해본다. 내 경우에는 시스템에 python이 두 개가 설치되어 있었는데, 터미널을 열 경우와 Emacs나 다른 유틸(GNU Global)을 실행하는 시점에서 python 경로가 달라 위와 같은 에러가 떴다. 추가로 설치된 python을 삭제하고 pygments 등을 재설치해 주었더니 문제가 해결되었다.

References

'Programming' 카테고리의 다른 글

Regular expression in sed  (0) 2018.04.25
How to terminate a background process  (0) 2018.04.24
Xcode에 assimp 올리기  (0) 2017.06.06
OpenGL로 원 그리기  (1) 2017.05.27
Swift3 - result unused warning 없애기  (0) 2017.05.23