Ubuntu에서 DDM 기능 대체하기

Dell 모니터 중 KVM 기능을 지원하는 제품의 경우, Windows나 macOS에서는 DDM (Dell Display Manager)라는 프로그램을 통해서 모니터를 키보드를 통해 제어할 수 있다.

이를 이용하면 유용한 점이, 모니터를 직접 조작하지 않고도, 입력 소스를 선택할 수 있어 두 대의 PC를 오가며 쉽게 작업할 수 있다는 점이다.

다만 아쉽게도 아직까지 Ubuntu에서 동작하는 DDM은 없는 상황이다. 하지만 구글링을 해보면 쉽게 이를 대체할 수 있는 방법이 나온다.

기본적으로 DDM의 역할은 모니터에 연결된 특정칩에 명령을 전달하는 것인데, 이 명령이 DDC/CI 기능을 이용한다. 아마 게임기나 셋탑박스를 연결할 때, 케이블을 꼽기만 해도 해당 입력소스로 자동으로 전환되는 것을 경험해보셨다면, 그 모니터가 DDC/CI 기능을 지원한다는 의미이다.

Ubuntu에도 이러한 기능을 수행하는 커맨드가 존재하는데, ddccontrol 이 그것이다.

설치는 다음과 같이

$ sudo apt install ddccontrol

설치하면 되고..

이제 실행을 해보면, 먼저 모니터를 인식하는지를 확인해보면…

$ ddccontrol -p
ddccontrol version 0.6.0
Copyright 2004-2005 Oleg I. Vdovikin (oleg@cs.msu.su)
Copyright 2004-2006 Nicolas Boichat (nicolas@boichat.ch)
This program comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of this program under the terms of the GNU General Public License.

Detected monitors :
 - Device: dev:/dev/i2c-6
   DDC/CI supported: Yes
   Monitor Name: VESA standard monitor
   Input type: Digital
  (Automatically selected)
Reading EDID and initializing DDC/CI at bus dev:/dev/i2c-6...
I/O warning : failed to load external entity "/usr/share/ddccontrol-db/monitor/DEL426A.xml"
Document not parsed successfully.
I/O warning : failed to load external entity "/usr/share/ddccontrol-db/monitor/DELlcd.xml"
Document not parsed successfully.

EDID readings:
	Plug and Play ID: DEL426A [VESA standard monitor]
	Input type: Analog

...
= VESA standard monitor
...
> Input settings
	> Input sources
		> id=inputsource, name=Input Source Select (Main), address=0x60, delay=-1ms, type=2
		  Possible values:
			> id=analog - name=Analog, value=1
			> id=digital - name=Digital, value=3
		  supported, value=3855, maximum=14
...

와 같이 연결된 모니터 정보가 인식된다.

이중, 중요한 것이, 연결되어 있는 디바이스 정보인데, 여기에선 /dev/i2c-6으로 되어 있다. 또, Input sources를 설정하는 레지스터 주소가 0x60으로 되어 있는 것을 알 수 있다.

이제 0x60에 특정한 값을 넣으면, 해당되는 입력 소스로 전환할 수 있다는 것인데… 이 특정한 값이 무엇인지를 파악해야 하는데, 역시 검색해보면 답이 바로 나온다.

  • Display Port : 0x0f (15)
  • USB-C : 0x1B (27)
  • HDMI : 0x11 (17)

이다.

즉 터미널에서 다음과 같이 입력하면, USB-C 입력소스로 즉시 전환된다.

$ ddccontrol -r 0x60 -w 27 dev:/dev/i2c-6

이제, 이 명령을 키보드 단축키로 지정하면 쉽게 사용 가능.

설정에서 키보드 > 키보드 단축키 설정 > 사용자 단축키 설정

이제, 위 단축키를 이용하면, 모니터의 입력소스를 조정하여 쉽게 전환이 가능하다.

Dell U2723QE 모니터 구입

새로 만든 개발용PC에 사용할 모니터를 고민하다가, Dell U2723QE 모니터로 결정하고 구입하였음.

Dell UltraSharp 27 4K USB-C 허브 모니터 – U2723QE

출처: Dell.com

화질이야 어짜피 IPS 패널 정도면, 큰 무리는 없을듯 하고… 27인치냐 32인치냐를 한참 고민했었는데… 27인치에서 4k를 Native 해상도로 사용하기엔 살짝 무리가 있고, 32인치는 Native 해상도로 사용하기엔 큰 문제가 없는데, 맥북 등에서 레티나 해상도로 사용하면 글자가 엄청나게 커지니… 또 책상의 크기도 반영하여 27인치로 결정

또 하나 재밌는 기능이 포함되어 있는데, KVM 기능이 내장되어 있음. 모니터 하나를 가지고 2대의 PC에서 사용할 수 있는 기능인데, 모니터의 입력 소스를 선택하면 해당되는 PC로 키보드와 마우스를 자동으로 전환해 줌. 따라서 편하게 메인PC를 사용하다가 노트북을 붙여서 사용할 때도 큰 무리없이 함께 사용 가능. Good!

출처: Dell.com

가격은 공식 홈페이지에선 이상한 가격으로 되어 있는데, 대충 799,000원이 공식 가격인듯… (할인은 얄짤도 없다는…)

Dell XPS 15 7590 (2020) Ubuntu 스크린 밝기 조정 에러 수정

업뎃: 아래와 같이 수정을 해도 제대로 로딩되지 않은 상황 발생. 문제는 이게 OLED다 보니 기존 스크린 밝기를 조정했던 백라이트 조정과는 차이가 있음. (OLED는 백라이트가 없고, 각각의 소자들의 값을 조정하여 밝기를 조정함.)

수동으론 조정 가능

$ xrandr --output eDP-1-1 --brightness .5

지난 포스팅에서 델의 XPS 15 7590 (2020)에 Ubuntu를 설치하는 방법을 설명하였는데, 설치 완료 후 스크린 밝기가 조정이 안되는 문제가 있었습니다.

인터넷엔 능력자들이 많기에 검색을 해보니, 역시나 문제에 대한 분석 및 해결 방법이 있었습니다. 신형 노트북 모니터 특히 OLED를 사용한 모니터와 기존 스크린 밝기를 조정하는 부분이 뭔가 호환이 안되는듯 합니다.

몇가지 귀찮은 작업을 해주면 사용 가능한데, 먼저 내 노트북의 디스플레이 이름을 확인합니다

$ xrandr --listmonitors
Monitors: 1
 0: +*eDP-1-1 3840/344x2160/194+0+0  eDP-1-1

eDP-1-1” 이 모니터 이름입니다. 터미널에서 명령을 입력하여 밝기가 조정이 되는지 확인해봅니다.

$ xrandr --output eDP-1-1 --brightness 0.5

정상적으로 밝기가 반정도 어두워지는 것을 확인할 수 있습니다. 0으로 하면 완전 검은색으로 변하니 주의하시고요. 이제 이것을 스크린 밝기를 조정하는 키와 맵핑을 해줘야 합니다.

두 개의 파일을 만들어줍니다.

$ sudo vi /etc/acpi/events/dell-brightness-up
event=video/brightnessup BRTUP 00000086 00000000
action=/etc/acpi/dell-brightness.sh up

$ sudo vi /etc/acpi/events/dell-brightness-down
event=video/brightnessdown BRTDN 00000087 00000000
action=/etc/acpi/dell-brightness.sh down

그런 다음 dell-brightness.sh 를 위 경로에 만들어줍니다.

$ sudo vi /etc/acpi/dell-brightness.sh
#!/bin/bash
DISPLAYNAME=$(xrandr --listmonitors | awk '$1 == "0:" {print $4}')

OLED_BR=`xrandr --verbose | grep -i brightness -m 1 | cut -f2 -d ' '`
CURR=`LC_ALL=C /usr/bin/printf "%.*f" 1 $OLED_BR`

MIN=0
MAX=1.0

if [ "$1" = "up" ];
    then
        VAL=`echo "scale=1; $CURR+0.1" | bc`
    else
        VAL=`echo "scale=1; $CURR-0.1" | bc`
fi

if [ `echo "$VAL < $MIN" | bc -l` = "1" ];
    then
        VAL=$MIN
elif [ `echo "$VAL > $MAX" | bc -l` = "1" ];
    then
        VAL=$MAX
else
    `xrandr --output $DISPLAYNAME --brightness $VAL` 2>&1 >/dev/null | logger -t oled-brightness
fi



# Set Intel backlight to fake value
# to sync OSD brightness indicator to actual brightness
INTEL_PANEL="/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/intel_backlight/"
if [ -d "$INTEL_PANEL" ]; then
    PERCENT=`echo "scale=4; $VAL/$MAX" | bc -l`
    INTEL_MAX=$(cat "$INTEL_PANEL/max_brightness")
    INTEL_BRIGHTNESS=`echo "scale=4; $PERCENT*$INTEL_MAX" | bc -l`
    INTEL_BRIGHTNESS=`LC_ALL=C /usr/bin/printf "%.*f" 0 $INTEL_BRIGHTNESS`
    echo $INTEL_BRIGHTNESS > "$INTEL_PANEL/brightness"
fi

저장하고, 이 스크립트 파일을 실행 가능하도록 수정

$ sudo chmod u+x /etc/acpi/dell-brightness.sh

그런 다음 재부팅하면 수정 완료.

참고링크: https://github.com/TillmannBerg/Ubuntu-Dell-XPS-15-2019

Dell XPS 15 7590 (2020) Ubuntu 설치 관련

최근 Dell XPS 15 7590을 업무용으로 사용하게 되었는데, 기존 외장 USB 드라이브에 Ubuntu를 설치하고 사용하는데 약간의 차이가 생겨, 이에 대한 기록 차원에서 정리.

가장 큰 차이는 더이상 델의 최신 버전 노트북에선 Legacy External Boot가 지원되지 않는다고 합니다. 대략 찾아보니 보안 관련, 32bit에 대한 지원 종료 (64bit만 사용) 등의 이유로 그렇게 된 듯 합니다. 따라서 BIOS 화면에서도 이에 관한 옵션이 사라져 있습니다. 델 상담원이랑 채팅을 통해 상담했는데 그렇다고 하네요.

이에 따라 Grub를 이용해서 부팅하던 USB 설치 스틱도 써먹을 수가 없었는데, 이는 Ubuntu에 내장된 Startup Disk Creator 어플리케이션을 사용하여 쉽게 새로운 설치 스틱을 만들수 있습니다.

이와 같은 상황으로 기존 BIOS에서 Secure Boot 옵션을 껐던 적이 있었는데, 이젠 그것은 그냥 켜두시면 됩니다. (보안에 좋답니다. ㅎㅎㅎ)

NVIDIA 드라이버를 정상적으로 사용하시려면 여전히 Secure Boot 옵션은 꺼둬야 합니다. 살짝 해맸네요..

Ubuntu 설치디스크로 부팅하시고 설치는 그냥 진행 하시되, 파티션 설정 부분에서 기존 /boot로 설정했던 파티션을 EFI 파티션으로 변경해야 합니다. 부트로더 설치할 디스크는 여전히 사용할 외장 USB 드라이브를 선택하시면 되고요. 그렇게 되면 파티션 설정은

Device     Boot     Start       End   Sectors   Size Id Type
/dev/sda1  *        65535   3932099   3866565   1.9G ef EFI (FAT-12/16/32)
/dev/sda2         3932100 456385739 452453640 215.8G 83 Linux
/dev/sda3       456385740 488366819  31981080  15.3G 82 Linux swap / Solaris

와 같이 될겁니다.

이후 설치가 완료되고, 재부팅을 한 다음 로고가 나올때 F12키를 연타해보면, UEFI 리스트에 외장 USB 드라이브의 이름이 나오고, 이를 선택하면 잠시 검은색 화면이 나오고 재부팅되는데….

다시 F12키로 부팅리스트를 보면 ubuntu라는 UEFI가 추가로 생성됨을 볼수 있습니다. 이제 이것을 선택하면 정상적으로 부팅됩니다.

이제 사용하면 끝.!

덧:

  • 화면 밝기가 조정이 안됩니다. 하지만 이는 버그인듯하여 쉽게 수정이 될듯 합니다.
  • 기존 말썽을 부리던 Killer WiFi 카드의 드라이버가 그냥 잡힙니다. 하지만 성능은 여전히 구립니다.
  • 이전에 사용하던 Dell XPS 15 9570에서 고질적으로 발생하던 스크린 Flickering 현상은 새로운 모델에선 나타나지 않습니다.

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 요 세개의 패키지를 설치하고 완료된 이후 재부팅하면 적용됨을 볼 수 있습니다.

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

[노트북] DELL XPS15-9570 D662X9570508KR

현재 사용하고 있는 맥북프로 레티나 2012mid 모델이 오래된 티를 내는지 Ubuntu에서 조금만 빡센 작업을 하면 쓰로틀링이 걸려 엄청 느려지기 시작했습니다.

Ubuntu/ROS를 사용하면서 성능도 괜찮은 노트북을 검색하다가 맨처음 맘에 들었던 제품은 Razer Blade 15 2018 이었는데, 아쉽게도 아직 한국에 정식 출시도 안되었고 직구하기엔 시간이 좀 걸리는 관계로… 다음 순위였던 델 노트북으로 선택.

들고 다닐수 있는 고성능 노트북 중 그래도 납득할 만한 가격과 어느 정도 받쳐주는 성능으로 DELL XPS15-9570 D662X9570508KR을 선택하였습니다. 4k 디스플레이, GTX1050Ti, 인텔 i9 8세대, 램 16GB. 이정도면 큰 무리없이 몇년간은 사용할만한 사양인듯 합니다.

DELL XPS15-9570 D662X9570508KR

며칠간 사용해본 소감으론

  • 팬 소리가 심하다
  • 성능은 뭐 나름 만족
  • 디스플레이도 만족
  • 다시 사용하게 된 윈도우10은 역시나 별로
  • 스피커, 트랙패드 등은 기대도 안함.

끝!.