tag: 개발 잡동사니

Lenovo ThinkPad X1 Carbon 6세대 디스플레이 교체기

2021년 6월 18일

2018년 중순에 구입한 싱크패드를 계속 사용하고 있었다. 구입할 당시에 가장 고민했던 부분이 바로 디스플레이였는데 Costco에서 판매하는 모델은 밝기가 상당히 낮은 디스플레이를 탑재하고 있었다. 들고 다니는 용도라서 FHD면 베터리도 더 오래가고 매트 코팅이라서 눈도 피로하지 않겠다 생각하고 구입을 결정했었다. 사용에 큰 불편함은 없었지만 창을 여럿 열고 개발을 하거나 여러 자료를 동시에 봐야 할 때는 낮은 해상도와 어두운 화면이 계속 거슬렸다.

교체를 할 수 있나 찾아보다가 생각보다 시도한 사람도 많고 방법도 잘 정리되어 있었다. 탑재된 FHD는 250 nit에 1920x1080 인데 HDR WQHD는 500 nit에 2560x1440 까지 지원한다. 학기 사이 방학동안 교체할 마음으로 부품을 주문했다.

전체적인 순서와 제품은 레딧에 올라온 글을 참고했다.

시간 여유가 있었으면 필요한 부품을 알리익스프레스에서 구입했을 텐데 다음 학기가 코앞이라 eBay에서 미국 내 배송하는 곳을 찾아 주문했다. 위 글에서는 상판 커버도 교체했는데 FHD 커버(01YR430)와 WQHD 커버(01YU642) 사진을 찾아보니 차이가 없는 것 같아 일단 교체해보고 문제가 생기면 그때 커버를 구입하기로 결정했다.

그리고 전면 베젤이 스티커라는 걸 처음 알았는데 조심히 뜯어서 다시 붙이기로 했다.

  • 00NY679 14인치 WQHD 디스플레이 ($139.99)
  • 01YR429 WQHD용 40-pin eDP 케이블 ($23.14)

디스플레이 판매하는 곳이 실제로 어떤 디스플레이인지 메시지 보내서 물어봐야 한단다. 그렇지 않으면 호환 규격은 맞지만 다른 제품으로 보내주는 경우가 많다고. 나는 00NY679 불렀는데 00NY680이 왔다. 호환은 되지만 찜찜.

Part #BrandBrightnessColor space
00NY679AUO B140QAN02.0 WQHD HDR500nit100% sRGB, 89% adobeRGB
00NY680Japan Display JDI LPM140M420 WQHD HDR500nitno reviews found
00NY664LG Display LP140QH2(SP)(B1) QWHD non-HDR300nit98% sRGB, 68% adobeRGB
00NY681AUO B140QAN02.3 WQHD non-HDR300nit96% sRGB, 61% adobeRGB
01YN103BOE NV140FHM-N46 FHD non-HDR non-touch250nit59% sRGB & 38% adobeRGB

내 랩탑은 20KG 모델이고 교체 방법은 레노보 웹사이트에 잘 정리되어 있었다. 영상 따라서 분해하고 조립했는데 전혀 어려움이 없었다.

교체 직후에 여름 학기가 시작되어서 또 바빠졌다. 아무래도 무광에서 유광 디스플레이로 바뀌고 나니 자꾸 내 얼굴이 보이는 문제가 있었다. 아마존에서 저렴한 14인치 반사 제거 필름을 붙여서 해결했다.

아이폰 디스플레이와 비교했을 때 엄청 어두웠는데 교체 후 최대 밝기는 아이폰보다 밝다. 실제로 사용해보니 70% 정도만 설정해도 편하게 쓸 수 있었다. 다만 베터리 소모가 조금 많아졌는데 크게 와닿을 정도로 사용 시간이 줄어들진 않았다.

그동안 다른 랩탑 디스플레이도 여러 차례 교체해봤는데 가장 편하게 교체한 모델이다. 아무래도 기업에서 많이 사용해서 그런지 교체 방법도 공개적으로 정리되어 있고 파트 정보도 쉽게 찾을 수 있는 게 흥미로웠다.

suckless st 한글 띄어쓰기 문제 수정하기

2020년 3월 18일

suckless의 st 터미널을 사용하고 있는데 간혹 한글 입력에서 띄어쓰기 순서가 뒤죽박죽되는 문제가 있었다. 가령 "맑은 물"을 입력하면 "맑 은물"로 입력되는 식이다.

입력하는 속도에 상관없이 이 증상이 가끔 나타나서 불편했었다. 다른 터미널에서는 별 문제 없이 동작하는 점에서 볼 때 st의 문제라고 생각했었는데 urxvt 코드랑 비교해봐도 크게 차이나는 부분은 없었다. 그래서 im 떄문인가 싶어서 fcitx 대신 ibus랑 scim도 설치해서 확인해봤는데 문제가 더 두드러지게 나타났다.

st의 run 함수에서 실제로 전달받는 XEvent를 확인해보면 실제로 띄어쓰기가 가끔 먼저 전달되는 경우를 확인할 수 있었다. XEvent 자체가 비동기라서 순서가 반대로 온다면 fcitx의 문제이거나 컴퓨터 성능탓에 처리 지연이 있다거나 다른 터미널에 비해 가벼워서 사이클 속도가 훨씬 빨라 지연이 눈에 띄게 보인다거나... 그런 가정만 늘어갔다. 10번 입력하면 한 두 번 발생하기 때문에 무엇이 문제인지 판단하기도 어려웠다.

그래서 st 코드를 하나씩 살펴보며 변경할 수 있는 구조는 다 변경해봤다. 그러던 중에 XCreateIC 호출 부분을 수정했는데 일단 순서가 뒤바뀌는 문제는 고쳐졌다! XIMPreeditNothing에서 XIMPreeditNone으로 변경했다. 커서 위치에 표시되는 입력창이 화면 좌측 하단에 고정되어 표시된다.

변경 diff는 다음과 같다. x.c 파일을 수정한다.

diff --git a/x.c b/x.c
index 48a6676..13d6249 100644
--- a/x.c
+++ b/x.c
@@ -1045,7 +1045,7 @@ ximopen(Display *dpy)
 
 	if (xw.ime.xic == NULL) {
 		xw.ime.xic = XCreateIC(xw.ime.xim, XNInputStyle,
-		                       XIMPreeditNothing | XIMStatusNothing,
+		                       XIMPreeditNone | XIMStatusNothing,
 		                       XNClientWindow, xw.win,
 		                       XNDestroyCallback, &icdestroy,
 		                       NULL);

suckless dwm 사용기

X-window용 단순하고 명료한 동적 윈도우 관리자 dwm

2020년 3월 15일

얼마 전 구입한 크롬북에 무엇을 어떻게 설치해서 써야 낮은 사양에서도 편하게 쓸 수 있나 둘러보다가 suckless에서 만든 dwm에 대해 알게 되었다. 레딧에서 자주 보였던 윈도우 관리자라서 이름 정도는 알고 있었지만 그렇게까지 미니멀한게 필요하지 않다는 생각에 찾아보지도 않았었다. 조그마한 메모리 사용까지도 영향을 받는 기기를 쓰다보니 무거운 데스크탑 환경을 벗어나야만 했다.

suckless.org는 공개된 소프트웨어도 흥미롭지만 게시된 웹페이지 내용도 재미있다.

Our project focuses on advanced and experienced computer users. ("Philosophy")

코드 품질에 대한 이야기도 흥미롭다. 직관적으로 문제를 해결하는 코드가 코드 복잡도를 낮춘다는 이야기도 재미있다. 모든 내용이 유익하다고는 할 수 없고 공감이 안되는 부분도 있긴 하지만 소프트웨어가 어떤 맥락에서 만들어졌는지 이해하는데는 큰 도움이 된다.

As the number of lines of code in your software shrinks, the more skilled you have become and the less your software sucks. ("Philosophy")

처음엔 왜 이런 기능도 없어보이는 도구가 필요한가 의아했는데 설치하고 한동안 사용해보니 그 매력에 완전 빠졌다. dwm을 사용하면 tmux의 확장판인 기분이 든다. 프로그램의 모든 창을 타일로 관리할 수 있기 때문이다. tmux는 터미널만 정렬하고 쓸 수 있지만 dwm은 실행할 수 있는 모든 것을 타일로 관리할 수 있다. 물론 타일 외에도 다른 레이아웃도 사용할 수 있고 태그라는 기능으로 다중 윈도우처럼 사용하는 것도 가능하다. 게다가 매우 가벼워서 존재하지 않는 것처럼 느껴질 정도다.

특별히 독특하다고 느낀 부분은 코드 패치인데 프로그램이 모든 기능을 지원하고 설정을 제공하는 것이 아니라는 점이다. 필요한 기능은 별도의 diff 파일로 제공하고 있어서 기능이 필요하지 않으면 아예 바이너리에도 포함되지 않는다. 이런 실용주의적 접근이 아마 도구 자체가 가벼운 이유인 듯 하다. 익숙하지 않다면 분명 복잡한 과정이겠지만.

대략 이런 모습

설치

설치는 직접 받아서 빌드해야 한다. 설정을 위한 파일이 따로 존재하지 않고 config.h에 정의해서 빌드해야 하기 때문이다. c로 작성된 소프트웨어라 컴파일러가 없다면 설치해야 한다.

suckless.org의 dwm 페이지에서 압축 파일로 받거나 git 리포지터리에서 복제할 수 있다.

$ git clone https://git.suckless.org/dwm

먼저 기본 config 파일을 생성해야 한다.

$ make config.h

config.h에서 변경하고 싶은 내용은 변경하면 된다. 그리고 빌드해서 설치한다.

$ make && make install

설치 후에는 로그인 화면에서 dwm을 설치할 수 있도록 /usr/share/xsessionsdwm.desktop을 추가한다.

[Desktop Entry]
Encoding=UTF-8
Name=Dwm
Comment=Dynamic window manager
Exec=dwm
Icon=dwm
Type=XSession

dwm을 효과적으로 사용하려면 동적 메뉴인 dmenu도 설치해야 한다. dwm처럼 suckless의 dmenu 페이지에서 받거나 git 리포지터리를 이용한다.

$ git clone https://git.suckless.org/dmenu/ && cd dmenu
$ make config.h
$ make && make install

이제 로그아웃해서 dwm 세션을 선택해 로그인하면 된다.

단축키

dwm을 시작해보면 아무 것도 없는 휑한 화면만 나온다. 대부분의 기능은 단축키로 사용할 수 있다. 기본 단축키를 기준으로 설명하지만 이 단축키는 모두 config.h에서 추가/수정/삭제가 가능하다.

Shift + Alt + Q      dwm 종료하기
Shift + Alt + Enter  터미널 실행하기
Alt + P              dmenu 열기
Shift + Alt + C      현재 창 닫기

Alt + j, k           창 커서 이동하기
Alt + h, l           마스터 창 크기 조절하기
Alt + d, i           창 마스터/스택으로 이동하기
Alt + Enter          마스터 창과 스택 바꾸기
Alt + 1...9          해당 숫자 태그로 이동하기
Shift + Alt + 1...9  현재 창 해당 태그로 보내기

# 레이아웃
Alt + t               타일 모드
Alt + f               플로팅 모드
Alt + m               모노클 모드

## 플로팅 모드
Alt + 우클릭          창 크기 조절하기
Alt + 좌클릭          창 위치 이동하기
Shift + Alt + Space   플로팅 전환하기

타일로도 충분히 편리하게 사용하고 있어서 플로팅은 거의 사용하지 않고 있다.

우측 상단에 dwm-{버전} 표시는 status라고 하는 영역인데 이 영역 문자열은 다음 명령어로 변경할 수 있다.

$ xsetroot -name "Hello World"

이 상태 영역을 주기적으로 업데이트하는 별도의 도구를 설치하면 편리하다. dwmstatus 페이지에서 상태 모니터 도구를 찾을 수 있다. 나도 하나 간단하게 작성했는데 dwm-simple-status에서 확인할 수 있다.


suckless에서 개발한 다양한 도구를 보고 있으면 나도 이런 가벼운 도구를 만들고싶다는 생각이 자연스레 따라온다. 많은 dwm 포크와 클론을 보면 비슷한 생각을 하는 사람이 많나보다. dwm, dmenu, surf, st 모두 웹사이트에 게시한 철학을 잘 따라서 만들어진 도구라 더 매력적으로 느껴지는 것 같다.

Hyper-V 상의 Ubuntu에 고급 세션 모드 사용하기

고급 세션 모드(enhanced session mode)로 느린 사용성 개선하는 방법

2020년 1월 24일

Windows에 Hyper-V로 Ubuntu를 설치한 후에 제공하는 도구로 접속해보면 마우스도 느리게 움직이고 키보드 입력도 답답하다.

이 문제를 해소하기 위해 고급 세션 모드(enhanced session mode)가 추가되었다. 내부적으로 RDP를 이용해서 해당 가상 컴퓨터(VM)에 접속하는 방식이다. Windows 10 버전 1709 이후로 제공되는 Hyper-V 빨리 만들기 (Quick Create) 프로그램에서는 이 고급 세션 모드를 기본적으로 사용할 수 있도록 설정된 Ubuntu VM을 제공하고 있다.

하지만 직접 리눅스 이미지를 사용해서 VM을 생성했다면 별도의 설정이 필요하다. 해당 설정을 위한 스크립트는 microsoft/linux-vm-tools에서 제공하고 있다. 해당 스크립트에는 linux-virtual 관련 툴 설치, xrdp 설치 및 설정이 포함되어 있고 각 항목마다 주석으로 설명이 있어서 어떤 도구가 설치되는지 궁금하다면 확인해보자.

설치한 Ubuntu는 19.10이며 위 스크립트는 18.04인데 설치에 큰 차이가 없었다. 16대 버전은 다른 설치파일이 존재하므로 위 링크를 참조해야 한다.

  1. Ubuntu 새 이미지를 받아서 빨리 만들기 프로그램을 사용해 VM에 설치한다.

  2. Ubuntu VM을 구동해서 root 권한으로 설치 스크립트를 실행한다.

    $ wget https://raw.githubusercontent.com/microsoft/linux-vm-tools/master/ubuntu/18.04/install.sh
    $ bash install.sh
  3. 필요에 따라 VM을 재시작한 후 다시 스크립트를 실행한다.

  4. 설치가 완료되면 VM을 종료한다.

  5. Windows PowerShell을 관리자 권한으로 실행한 후에 다음 명령으로 해당 VM의 고급 세션 모드를 활성화한다. <VM_NAME>은 VM 이름으로 바꿔야 한다.

    Set-VM -VMName "<VM_NAME>" -EnhancedSessionTransportType HvSocket
  6. Hyper-V 관리자에서 VM을 실행하면 VM이 구동된 후 해상도 선택 화면이 나온다. 선택 후 접속한다.

  7. xrdp 로그인 화면이 나온다. 로그인하면 세션이 시작된다.

여전히 느린 부분도 있긴 하지만 마우스 커서가 버벅이거나 키보드 입력이 느린 현상은 확실히 개선되었다.


Dell Latitude E7240 디스플레이 교체기

2018년 3월 21일

얼마 전에 중고 Dell Latitude E7240을 100달러 주고 구입했었다. cpu는 i3지만 램도 넉넉하고 ssd도 달려 있어서 그런지 개발 장비로도 큰 무리 없을 것 같아 장만했다. 리눅스 머신을 갖고 싶었는데 너무 적절한 노트북이였다.

디스플레이가 TN패널인 게 단점이었다. 검색해보니 시중에 IPS 모델도 있기도 했고 그러면 IPS 패널만 사다가 교체하면 되는 것 아닐까 싶었다. 찾아보니 실제로 구입해서 교체한 글도 찾을 수 있었다.

문제는 그 검색했던 스레드에 페이지네이션이 너무나도 작았고 그 뒤에 더 많은 이야기가 있다는 점이었다. 그 사실을 알리익스프레스에서 구입하고 패널을 받고 교체하기 위해 노트북을 다 뜯고나서, 패널이 맞지 않는다는 사실을 알고 나서야 알게 되었다. 세상에. 그래서 다른 패널을 또 다시 주문했고 오늘 드디어 도착해서 교체했다.

새로 구입한 패널은 LP125WH2-SPM1 이다. 이 패널도 완전하게 100% 맞지는 않는다. 원래 패널보다 몇 mm 정도 넓어서 상판 지지대 같이 생긴 부분에 닿는다. 프레임 커버가 엄청 헐렁한 플라스틱 소재고 조립해도 크게 문제가 생기지 않을 것 같아서 그대로 두고 조립했다.

일단 IPS라서 시야각이 전혀 없다시피 하고 밝기도 훨씬 개선되었다. 이제는 유튜브 틀어도 전혀 거슬리지 않는다. 기존 TN 패널보다 한 2mm 정도 padding이 있어서 프레임에 딱 맞지 않는다. 워낙 화면이 좋으니까 별로 문제 없다.

뜯는 방법은 유튜브 영상을 보고 했다. 후면만 뜯으면 패널을 쉽게 교체할 수 있다.

구입은 알리익스프레스에서 했고 패널 정보는 panelook.com에서 확인했다. 구입 전에 패널 이름, 디스플레이 실측 크기와 edp의 lane을 잘 확인하자. 패널 이름이 일반적으로 규격 자체를 의미하는 경우가 많은 것 같다. 그리고 edp의 lane이 다른 경우에는 edp 케이블도 구입해야 하고 뜯어야 하는 범위도 커지니 주의하자. 그리고 가장 큰 복병이 패널 하단에 있는 PCB다. 사진 보면 검정 테이프로 처리되어 있는데 이 폭이 달라서 장비에 안맞을 수 있으니 구입 전에 잘 본다. 그리고 나사 구멍 수가 다르거나 위치가 다를 수 있으니 잘 확인하자.

패널을 두 차례 구입했어도 총 지출은 노트북 포함 270달러 정도다. 예전에 사용하던 인스피론 모델 최하위 사양이 300달러였던걸 생각하면 뿌듯하다. 이제 열심히 쓰는 일만 남았다!

트윗덱 메모

2018년 3월 1일

그동안 트위터 공웹을 사용했었는데 트윗덱으로 바꿨다.

  • 공앱이랑 디자인이 거의 비슷하다. 그냥 공앱인데 다른 버전 쓰는 느낌 정도다.
  • 공앱 같은데 광고가 (아직) 없다. 최고.
  • Home을 숨기고 리스트만 보이게 만들었다. 그동안 단축키로 리스트를 왔다갔다 했는데(G-i) 리스트 오가는 귀찮음이 줄었다.
  • 키워드 뮤트도 가능하고, 각 리스트마다 별도의 exclude를 지정할 수 있어서 추가적으로 더 걸러낼 수 있다.
  • 순서라든지 크기라든지 리스트, 노티, 검색결과 등 개인화 할 수 있는 부분이 많아 좋다.
  • 다른 계정 같이 사용하는 경우에 편하다.
  • Ready to Tweet? 체크박스를 활성화해서 쓰는데 쓰기 전에 맞춤법도 다시 보고 트윗 계정이 맞는지도 보기 쉽고 좋다.
  • 의외로 리트윗 숫자랑 마음 숫자가 바로 보이는 것이 정보를 읽는데 있어서 편향을 만드는 것 같다. 별거 아닌데도 숫자가 크면 왠지 읽어야만 할 것 같은 기분도 들고 그러는데 트윗덱은 그런 표시가 목록서는 보이지 않는다.
  • 예약 트윗이 가능하다. 아직 쓰진 않았지만 이거 하려고 buffer 썼던거 생각하면 편리하다.

tweetdeck input

계정 표시 방법도 3개나 제공하고.

얼마 전에 트위터가 처음으로 흑자 냈다는 얘기가 있었는데 계속 잘 되었음 좋겠다.