Fix Screen Flickering of Dell Laptop on Ubuntu 18.04.3

현재 작업용으로 델 XPS15 9570 모델을 사용하고 있습니다. 처음 Ubuntu를 설치하여 사용할 때는 큰 문제는 없었는데, 최근들어 Ubuntu 설치때부터 사용중에도 화면이 계속 깜빡이거나 픽셀이 깨지는 등의 에러가 발생하였습니다.


덧: 검색해 본 결과, i915 (인텔 그래픽 드라이버)의 문제로, 4K 모니터를 가진 인텔 랩탑에서 대부분 발생하는 문제로 보임.


마치 하드웨어 (디스플레이 부분)의 불량인듯 보였지만, 윈도우로 부팅하게되면 이런 증상은 나타나지 않았기에 서비스를 맡기기에도 애매하였는데요. 검색을 해보니 (키워드: kernel 5.0, screen flickering) 리눅스 커널이 5.0 버전으로 올라가면서 eDP (아마도 디스플레이 패널 관련) 드라이버의 코드가 변경됨에 따라 일부 LCD 패널에서 발생하는 문제라고 합니다.

It was introduced by an optimization for eDP 1.4+ (“link config fast and narrow”) in the 5.x kernel; the patch doesn’t work for some panels, including that of the XPS 15, and had to be rolled back.

이 문제를 해결하는 방법으론 커널 버전을 이를 해결한 버전으로 올려야 한다고 하는데, 찾아보고 설치해 본 결과 커널 버전을 올려도 이와 같은 문제가 해결되진 않았습니다.

다음 방법으론 커널 소스를 직접 받아, 문제되는 부분을 수정하고, 커널을 빌드하여 사용하는 방법이 있습니다. 다음의 과정은 이와 같은 과정을 정리하였습니다.

먼제 커널 빌드에 필요한 패키지를 설치합니다. (Install necessary packages)

$ sudo apt install git build-essential kernel-package fakeroot libncurses5-dev libssl-dev ccache flex bison

작업을 위한 디렉토리를 생성하고, 커널 소스를 받아옵니다. 현재 사용하고 있는 커널 버전과 가장 유사한 버전을 가져오면 됩니다. 사용하고 있는 커널 버전은 “uname -r” 명령을 통해 확인 가능합니다.

make directory for kernel build and clone kernel source

업데이트: 현재 (2010/01) LTS 최신 커널 버전은 5.3.0-26이다.

$ cd ~
$ mkdir kernel_build 
$ cd kernel_build 
$ git clone -b linux-5.3.y git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
Cloning into 'linux-stable'...

remote: Enumerating objects: 8131608, done.
remote: Counting objects: 100% (8131608/8131608), done.
remote: Compressing objects: 100% (1204105/1204105), done.
Receiving objects: 100% (8131608/8131608), 1.30 GiB | 2.21 MiB/s, done.
remote: Total 8131608 (delta 6878708), reused 8130931 (delta 6878032)
Resolving deltas: 100% (6878708/6878708), done.
Checking out files: 100% (63144/63144), done.

소스를 받아오는데 좀 시간이 걸립니다. 해외망 속도가 빠르면 빨리 받아오기도…

다음으로 현재 사용중인 커널 버전의 빌드 configuration 파일을 복사해옵니다. move linux-stable directory, and copy current configuration of your current kernel.

$ cd linux-stable
$ cp /boot/config-`uname -r` .config

이제, 복사해온 configuration 파일을 현재 받은 커널 소스의 빌드 환경에 적용해 주도록 합니다. Now you have to adapt the old configuration to the new kernel.

$ yes '' | make oldconfig

이제 문제가 된 eDP 관련 소스 파일을 수정해 줍니다.

$ vi drivers/gpu/drm/i915/display/intel_dp.c

대략 2120번 라인으로 가보면, intel_dp_compute_link_config 함수 내에 다음의 라인을 수정해줍니다.

업데이트: 커널 버전이 바뀌면서 소스 파일의 위치 및 라인 변경

        if (intel_dp_is_edp(intel_dp)) {
		/*
		 * Use the maximum clock and number of lanes the eDP panel
		 * advertizes being capable of. The panels are generally
		 * designed to support only a single clock and lane
		 * configuration, and typically these values correspond to the
		 * native resolution of the panel.
		 */
		limits.min_lane_count = limits.max_lane_count;
		limits.min_clock = limits.max_clock;
	}

이 부분을,

        if (false && intel_dp_is_edp(intel_dp)) {
		/*
		 * Use the maximum clock and number of lanes the eDP panel
		 * advertizes being capable of. The panels are generally
		 * designed to support only a single clock and lane
		 * configuration, and typically these values correspond to the
		 * native resolution of the panel.
		 */
		limits.min_lane_count = limits.max_lane_count;
		limits.min_clock = limits.max_clock;
	}

와 같이 수정합니다.


이제 커널을 빌드합니다.

$ make -j8 deb-pkg

시간이 꽤 걸린 후에 빌드가 완료되면 상위 디렉토리에 몇개의 deb 파일이 생성됩니다. 이를 설치해주면 됩니다.

$ ll *.deb
-rw-r--r-- 1 byeongkyu byeongkyu  11204740 Jan 18 07:20 linux-headers-5.3.18+_5.3.18+-1_amd64.deb
-rw-r--r-- 1 byeongkyu byeongkyu  59519512 Jan 18 07:21 linux-image-5.3.18+_5.3.18+-1_amd64.deb
-rw-r--r-- 1 byeongkyu byeongkyu 841223388 Jan 18 07:26 linux-image-5.3.18+-dbg_5.3.18+-1_amd64.deb
-rw-r--r-- 1 byeongkyu byeongkyu   1057176 Jan 18 07:20 linux-libc-dev_5.3.18+-1_amd64.deb

linux-libc-dev, linux-headers, linux-image 요 세개의 패키지를 설치하고 완료된 이후 재부팅하면 적용됨을 볼 수 있습니다.

물론 화면의 깜빡임 역시 해결되었습니다.

Install WSL 2 on Windows 10

많이 알려져 있는 사실이긴 한데, (마이크로소프트가 어떤 변덕인지는 몰라도) Windows 10에서 Linux를 손쉽게 사용할 수 있게 되었다. 복잡한 설치가 필요한 것도 아니고, 그냥 Microsoft Store에서 클릭 한번이면 설치가 완료된다. 아직 Native Linux에는 좀 미치진 못하지만, 그래도 쉽게 설치하고 써볼 수 있다는게 어딘가… ㅎㅎ

마이크로소프트의 웹페이지에서 쉽게 설명하곤 있지만, 그래도 설치는 해봤으니 여기에다가 정리

설치

몇번 재부팅 과정이 필요하다. 처음 WSL 기능 활성화 할때 한번, WSL 2로 변환하기 위해 Virtual Machine Platform 기능을 활성화 하기 위해서 한번.

Power Shell을 Administrator 모드로 연다. (왼쪽 하단 돋보기 버튼을 누르고 power shell을 입력한 후, 앱 아이콘이 보이면 오른쪽 버튼을 눌러 Run as Administrator를 선택하면 된다.)

> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

y를 누르면, 재부팅하면서 WSL 기능을 활성화 한다.

각종 배포판을 지원하긴 하지만, 무난한 Ubuntu 18.04 LTS를 설치해본다. (다른 배포판들은 https://docs.microsoft.com/en-us/windows/wsl/install-win10 에서 확인 가능)

Get 버튼을 눌러 구입(?)하면, 자동으로 설치까지 완료.

시작메뉴를 확인해보면, 위와 같이 앱이 설치되어 있음을 확인할 수 있다. 이제 저걸 실행해보면,

어설픈 터미널창이긴 한데, 실제 Ubuntu의 터미널 환경을 제공한다. 물론 apt-get으로 패키지들도 설치 가능하다.

이제 잠시 종료하고, WSL 2로 업데이트해보도록 한다. 개선된 버전으로 64bit 실행파일을 지원한다곤 하는데, 자세한 설명은 여기(https://docs.microsoft.com/en-us/windows/wsl/wsl2-about)를 참조하면 될듯.

다시 Power Shell를 위와 마찬가지로 Administrator 모드로 열고,

> Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

을 실행하고, 재부팅한다.

다시 Power Shell을 열고, 다음과 같이 입력하여, 기설치된 배포판을 WSL 2로 변환한다.

> wsl --set-version Ubuntu-18.04 2

약간 시간이 흐르고, 변환이 완료되었다고 나오면 끝.


Windows 10에선 기존 허접하게 생긴 터미널 창을 대신하여, Windows Terminal (Preview) 버전도 제공된다. 역시 마이크로소프트 스토어를 통해서 설치가 가능하며, 여기를 눌러 설치한다.

실행해보면, 좀더 깔끔하게 생긴 터미널 창이 제공되고, 탭의 아래 꺽쇠 부분을 눌러보면 설정 파일에 접근할 수 있다.

터미널을 실행하면 바로 wsl로 접근할 수 있도록 프로파일을 추가해본다.

파일 중간 쯤, “profile” 섹션에 다음과 같이 추가한다.

{
      "acrylicOpacity": 0.9,
      "closeOnExit": true,
      "colorScheme": "Campbell",
      "commandline": "wsl -d Ubuntu-18.04",
      "cursorColor": "#FFFFFF",
      "cursorShape": "bar",
      "fontFace": "D2Coding",
      "fontSize": 9,
      "guid": "{c909ebdd-6f47-410b-a911-85f601d2cb80}",
      "historySize": 9001,
      "icon": "ms-appx:///ProfileIcons/{0caa0dad-35be-5f56-a8ff-afceeeaa6101}.png",
      "name": "wsl",
      "padding": "0, 0, 0, 0",
      "snapOnInput": true,
      "startingDirectory": "/home/byeongkyu",
      "useAcrylic": true
    }

여기서 guid는 고유한 값이어야 하므로, 터미널을 열고 uuidgen을 실행하면 사용할 수 있는 guid 값이 생성되고 이를 사용하면 된다.

이제 이것저것 설치해보며 사용해보면 될듯하다. 끝!

Set display scale for Ubuntu 18.04 on Parallels 14

패러럴즈에 Ubuntu 18.04를 설치하고, 패러럴즈 툴을 설치했음에도 불구하고 해상도 설정이 좀 이상한 경우가 있다. 특히 Display scale을 조절할 수 있는 옵션이 나타나지 않는데, 이 경우 흐리멍텅한 화면이나, 네이티브 해상도 (아주 작은 글씨)로만 사용해야 한다.

검색해보니 설정에는 안보이지만, 터미널 상에서 UI 스케일을 조정할 수 있는 방법이 있었다.

$ gsettings set org.gnome.desktop.interface scaling-factor 2

원하는 스케일 팩터를 뒷부분에 적으면 된다. 2는 200%를 의미한다.

다시 초기값으로 돌리려면,

$ gsettings reset org.gnome.desktop.interface scaling-factor

와 같이 입력한다.

터미널에서 명령어를 입력 후, 재부팅하거나 Logout 후 재로그인하면 설정이 반영된다.