Search

[Ubuntu] 우분투 22.04 키오스크 모드 만들기

Last update:

개요

버스 정류장 안내 디스플레이, 식당 키오스크 등에 가끔 오류가 나면 윈도우즈 OS 배경화면을 볼 수 있다. 개발자 편중과 장비 연동 등의 문제로 인해, 우분투를 키오스크로 사용하는 경우가 거의 없어고, 따라서 자료도 생각보다 많지 않다. 여기 우분투 22.04 버전을 기준으로 어떻게 키오스크 모드를 구현하는지 적어본다.

배경지식

Xorg과 Wayland

리눅스는 GUI를 메모리에 그리고 관리하는 디스플레이 서버가 있는데, 대표적으로 X windows system(이하 Xorg)과 Wayland가 있다. Wayland가 더 최신이며, Xorg을 대체한다. 우분투는 기존에 Xorg를 사용하고 있었는데, 21.04 버전부터는 디폴트로 Wayland를 사용하도록 변경되었다. 대신 xWayland라는 컴포넌트가 하나 더 추가되어 X11 프로토콜을 사용하는 애플리케이션도 Wayland 디스플레이 서버에 붙을 수 있도록 해두었다.
X11Xorg에서 사용하는 프로토콜 이름인데, 보통 엄밀히 구분하지 않고 쓰는 것 같다.
현재 사용하고 있는 세션을 확인하려면 아래 명령어를 입력해보면 된다. X11 또는 wayland를 확인할 수 있다.
$ echo $XDG_SESSION_TYPE
Shell
복사

Display manager, Window manager, Desktop envirenment

우분투 데스크탑은 기본적으로 GNOME(GNU Network Object Model Environment)이라는 데스크탑 환경을 사용하는데, GNOME은 Display manager인GDM, Window manager인 Mutter, 인터페이스인 GNOME shell 등을 포함한다.
Display manager는 우분투 부팅 시에 뜨는 로그인 화면을 띄워주는 역할을 하는데, 우분투 22.04는 디폴트로 GDM(GNOME Display Manager)을 사용한다. 로그인 화면 우측 하단을 보면 디스플레이 세션을 선택할 수 있는데, 우분투 22.04 기준 UbuntuUbuntu on Xorg 옵션을 볼 수 있다.
Ubuntu 세션은 wayland(+ xWayland)를 디스플레이 서버로 사용하고, Ubuntu on Xorg 세션은 Xorg를 디스플레이 서버로 사용한다.
로그인에 성공하면 설정된 세션이 실행되면서 Mutter 윈도우 매니저가 실행되고, 우리가 흔히 보는 우분투 데스크탑 바탕화면인 GNONE shell이 실행된다.

우분투를 키오스크로 만드는 방법

우분투를 키오스크로 만드는 방법은 여러가지가 있지만, 이 글에서는 사용자 정의 세션을 만드는 방법을 소개한다.

사용자 정의 세션 만들기

위에서 확인한 디스플레이 세션은 /usr/share/xsessions 경로에 .desktop 확장자로 저장되어 있다.
$ ls /usr/share/xsessions ubuntu.desktop ubuntu-xorg.desktop
Shell
복사
아래 명령어로 파일 내용을 확인해보면,
$ cat /usr/share/xsessions/ubuntu.desktop
Shell
복사
아래와 같은 내용이 들어있는데, 결국 Exec에서 특정 파일을 실행한다는 것을 알 수 있다.
우리의 목적은 우분투 22.04가 설치된 컴퓨터 실행 시 로그인 화면이 뜨거나, 바탕화면이 뜨지 않도록 하고, 우리의 목적 애플리케이션이 바로 실행되도록 해야한다. 따라서 아래와 같은 작업이 이루어져야 한다(Xorg 사용할 때 기준).
1.
부팅 시 특정 유저로 자동 로그인이 된다.
2.
자동 로그인 후 사용자가 정의한 X 세션이 생성된다.
3.
생성된 세션에서 윈도우 매니저를 실행한다.
4.
우리의 애플리케이션이 실행되며 화면이 뜬다.
이를 위해 아래 설정 절차를 밟아야 한다.
1.
GDM 자동 로그인 설정
2.
Wayland 대신 Xorg를 사용하도록 설정
3.
사용자 설정 세션 정의
4.
자동 로그인 후 사용자 설정 세션이 생성되도록 설정
하나씩 따라가보자.

GDM 자동 로그인 설정 및 Wayland Disable

아래 명령어로 gdm3 파일을 편집한다.
$ sudo vi /etc/gdm3/custom.conf
Shell
복사
[daemon] 섹션에서 아래 항목들의 주석을 해제하고, 자동 로그인할 사용자명을 입력한다.
[daemon] AutomaticLoginEnable=true AutomaticLogin=your_username
Plain Text
복사
아래 라인의 주석을 제거하여 Wayland를 비활성화한다.
WaylandEnable=false
Plain Text
복사

사용자 설정 세션 정의

우선 이 예제에서는 경량 Window manager인 openbox를 사용한다. 미리 설치해주자.
$ sudo apt update -y
Shell
복사
$ sudo apt install -y openbox
Shell
복사
그 다음 아래처럼 편집기를 열어 사용자 정의 세션 파일을 생성한다.
$ sudo vi /usr/share/xsessions/kiosk.desktop
Shell
복사
아래처럼 작성한다. 세션 이름은 kiosk로 했다.
[Desktop Entry] Name=kiosk Comment=My kiosk Exec=/usr/local/bin/kiosk-session Type=Application
Plain Text
복사
kiosk 세션을 실행할 경우 /usr/local/bin/kiosk-session 파일을 실행한다는 내용이다.
실행될 실행 스크립트를 작성한다.
$ sudo vi /usr/local/bin/kiosk-session
Shell
복사
아래 예제에서는 우분투 데스크탑에 기본 설치돼있는 firefox를 kiosk 모드로 실행했다. openbox
#!/bin/bash # 윈도우 매니저 실행 openbox & # 화면 꺼짐 방지 xset -dpms xset s off xset s noblank # Firefox 키오스크 모드 실행 /usr/bin/firefox --kiosk --height 800 --width 1280 --private-window 'https://google.com' # 프로세스 유지 while true; do sleep 1 done
Shell
복사
작성 완료 후 아래처럼 실행권한을 줘야 잘 작동한다. 빼먹지 말자.
$ sudo chmod a+x /usr/local/bin/kiosk-session
Shell
복사

자동 로그인 후 사용자 설정 세션이 생성되도록 설정

아래처럼 편집기로 사용자 설정 파일을 연다. 명령어에서 user_name을 사용할 유저 이름으로 바꿔주자.
$ sudo vi /var/lib/AccountsService/users/user_name
Shell
복사
[User] 부분에 다음을 추가하거나 수정한다.
[User] XSession=kiosk SystemAccount=false
Plain Text
복사
유저의 기본 X 세션을 kiosk로 설정한다는 뜻이다. 이렇게 하면 위에서 작성한 /usr/share/xsessions/kiosk.desktop 세션이 실행되고, 해당 세션은 /usr/local/bin/kiosk-session 쉘 스크립트를 실행하면서 애플리케이션이 실행된다.
아래는 VirtualBox에서 테스트한 화면이다.

References