Ubuntu 24.04 Server에 GUI 설치

Ubuntu Server는 설치 직후 CLI만 있는 상태다. 평소에는 문제가 없지만 GUI 전용 관리 도구를 써야 하거나 서버에 연결된 모니터로 직접 작업할 일이 생기면 데스크톱 환경(desktop environment)을 얹어야 한다. 문제는 데스크톱 메타패키지 하나가 패키지 600~1400개와 디스크 1~3GB를 끌고 온다는 점이고, 24.04는 GNOME 46 + Wayland가 기본이라 X11을 전제로 한 예전 설정이 그대로 통하지 않는다. 이 글에서는 갓 설치한 Ubuntu 24.04 LTS Server에 데스크톱 환경을 올리는 과정을 실제 VM에서 진행하면서 환경별 용량과 메모리 사용량을 실측하고, CLI로 되돌리는 방법까지 정리한다.

설치 전 상태 확인

$ systemctl get-default
graphical.target

$ systemctl status display-manager
Unit display-manager.service could not be found.

$ ls /usr/share/xsessions
ls: cannot access '/usr/share/xsessions': No such file or directory

$ dpkg -l | grep -c '^ii'
671

$ df -h --output=used,avail /
 Used Avail
 6.6G  180G

기본 타깃은 이미 graphical.target이지만 display-manager.service가 없어서 CLI로 부팅된다. 즉 GUI 설치는 부팅 타깃을 바꾸는 작업이 아니라 display manager와 세션 파일을 채워 넣는 작업이다.

데스크톱 환경별 용량 실측

24.04의 apt는 --dry-run에서 “After this operation…” 요약을 출력하지 않는다. 대신 --print-uris로 받아올 deb 크기를 합산하고, apt-cache showInstalled-Size로 설치 후 용량을 계산했다.

import subprocess, sys

def sizes(pkg):
    out = subprocess.run(["apt-get", "install", "--print-uris", "-y", pkg],
                         capture_output=True, text=True).stdout
    download, names = 0, []
    for line in out.splitlines():
        if line.startswith("'"):          # 'http://...deb' name_ver_arch.deb 12345 SHA256:...
            parts = line.split()
            download += int(parts[2])
            names.append(parts[1].split("_")[0])

    show = subprocess.run(["apt-cache", "show"] + names,
                          capture_output=True, text=True).stdout
    installed, seen, cur = 0, set(), None
    for line in show.splitlines():
        if line.startswith("Package: "):
            cur = line[9:]
        elif line.startswith("Installed-Size: ") and cur not in seen:
            seen.add(cur)
            installed += int(line[16:])   # KB 단위
    return len(names), download / 1048576, installed / 1024

for pkg in sys.argv[1:]:
    n, dl, inst = sizes(pkg)
    print("%-24s %5d pkgs  download %6.1f MB  installed %7.1f MB" % (pkg, n, dl, inst))
$ sudo python3 de-size.py ubuntu-desktop ubuntu-desktop-minimal xfce4 kde-plasma-desktop lxde
ubuntu-desktop            1018 pkgs  download  649.6 MB  installed  2287.8 MB
ubuntu-desktop-minimal     881 pkgs  download  514.2 MB  installed  1822.5 MB
xfce4                      634 pkgs  download  305.8 MB  installed  1252.0 MB
kde-plasma-desktop         954 pkgs  download  626.9 MB  installed  2077.3 MB
lxde                       848 pkgs  download  437.6 MB  installed  1611.6 MB

같은 방식으로 주요 데스크톱 메타패키지를 모두 측정한 결과다. 아무것도 설치되지 않은 24.04 Server 기준이므로, 이미 다른 데스크톱을 설치한 뒤에 측정하면 공유 의존성만큼 숫자가 줄어든다.

패키지데스크톱새 패키지다운로드설치 용량
xfce4Xfce 4.18634306 MB1.22 GB
lxdeLXDE848438 MB1.57 GB
ubuntu-desktop-minimalGNOME 46 (최소)881514 MB1.78 GB
kde-plasma-desktopKDE Plasma 5.27954627 MB2.03 GB
ubuntu-desktopGNOME 46 (전체)1018650 MB2.23 GB
xubuntu-desktopXfce + Xubuntu 앱1319814 MB2.79 GB
lubuntu-desktopLXQt1364873 MB2.74 GB
kubuntu-desktopKDE Plasma + Kubuntu 앱14181179 MB3.29 GB
ubuntu-mate-desktopMATE1456879 MB3.06 GB

xfce4·lxde처럼 데스크톱만 담은 패키지와 xubuntu-desktop·lubuntu-desktop처럼 배포판 기본 앱까지 묶은 패키지의 차이가 2배 가까이 난다. 서버에 GUI 도구만 띄울 목적이라면 앞쪽을 고르는 편이 낫다.

Display manager 선택

패키지24.04 버전새 패키지다운로드비고
gdm346.0-2ubuntu1534308 MBGNOME 기본, Wayland 세션 지원
lightdm1.30.0-0ubuntu14550268 MBXfce/LXDE와 조합, X11 전용
sddm0.20.0-2ubuntu415597 MBKDE Plasma 기본
slim1.3.6-5.3build3132.7 MBupstream 개발 중단, 신규 사용 비권장

표의 “새 패키지” 수가 큰 이유는 display manager 자체가 아니라 함께 딸려오는 X 서버와 GTK 스택 때문이다. 서버 습관대로 --no-install-recommends를 붙이면 이 부분이 통째로 빠진다.

$ apt-get install -s lightdm | grep -c '^Inst'
550
$ apt-get install -s --no-install-recommends lightdm | grep -c '^Inst'
1

후자로 설치하면 X 서버도 세션도 없이 lightdm 바이너리만 들어와 부팅 후 화면이 검게 멈춘다. 데스크톱 설치에서는 recommends를 끄지 말 것.

Xfce + LightDM 설치

$ sudo apt update
$ sudo apt install xfce4

display manager를 따로 지정하지 않아도 lightdm이 함께 들어온다. xfce4xfce4-session의 recommends인 light-locker(화면 잠금)가 lightdm을 depends로 걸고 있고, X 서버는 xfce4의 recommends인 xorg가 담당한다. 설치가 끝나면 세션 파일과 기본 display manager가 채워졌는지 확인한다.

$ ls /usr/share/xsessions
xfce.desktop

$ cat /etc/X11/default-display-manager
/usr/sbin/lightdm

$ systemctl is-active lightdm
inactive

$ dpkg -l | grep -c '^ii'
1305

$ df -h --output=used /
 Used
 8.2G

패키지는 예고대로 정확히 634개(671 → 1305)가 늘었고 디스크는 1.6GB 증가했다(설치 1.22GB + apt 캐시). display manager는 설치만 되고 아직 떠 있지 않으므로 sudo systemctl start lightdm이나 재부팅이 필요하다.

Ubuntu 24.04 LightDM 로그인 화면

SSH로만 접근하는 환경이라 세션이 실제로 뜨는지 확인하려고 자동 로그인을 걸었다. /etc/lightdm/lightdm.conf를 직접 고치는 대신 드롭인 파일을 쓰면 패키지 업그레이드 때 충돌하지 않는다.

[Seat:*]
autologin-user=noble
autologin-session=xfce
$ sudo groupadd -f autologin && sudo usermod -aG autologin noble
$ sudo systemctl start lightdm

$ loginctl list-sessions --no-legend | grep seat0
c1 1000 noble seat0 tty7 active no -

$ loginctl show-session c1 -p Type -p Desktop -p Active
Type=x11
Desktop=xfce
Active=yes

Type=x11은 Xfce 세션이 Xorg 위에서 돌고 있다는 뜻으로, x11vnc처럼 X11을 전제로 하는 원격 도구를 그대로 쓸 수 있다.

Ubuntu 24.04 Server에 설치한 Xfce 4.18 데스크톱

Ubuntu Desktop(GNOME 46) 설치

$ sudo apt install ubuntu-desktop

ubuntu-desktop은 GNOME Shell 46과 gdm3 조합이다. Xfce처럼 데스크톱만 필요하다면 ubuntu-desktop-minimal로 앱 묶음(LibreOffice·Thunderbird 등)을 빼고 137개 패키지, 460MB를 아낄 수 있다.

앞에서 Xfce를 이미 설치한 상태라 공유 의존성이 빠져 실제로는 537개만 새로 들어왔다(1305 → 1842). 디스크는 8.2GB에서 12GB로 늘었는데, 이 중 1.7GB는 deb이 아니라 snap이다.

$ snap list
Name               Version                         Rev    Tracking       Publisher    Notes
bare               1.0                             5      latest/stable  canonical**  base
core24             20260410                        1643   latest/stable  canonical**  base
firefox            153.0.3-1                       8736   latest/stable  mozilla**    -
gnome-46-2404      0+git.b31ceab-sdk0+git.f0723a0  164    latest/stable  canonical**  -
gtk-common-themes  0.1-81-g442e511                 1535   latest/stable  canonical**  -
mesa-2404          25.2.8-snap288                  1839   latest/stable  canonical**  -
snapd              2.76.1                          27591  latest/stable  canonical**  snapd
thunderbird        153.0-2                         1201   latest/stable  canonical**  -

$ du -sh /var/lib/snapd/snaps
1.7G    /var/lib/snapd/snaps

Firefox·Thunderbird가 deb이 아니라 snap으로 들어오고 GNOME 런타임(gnome-46-2404)까지 따라붙는다. snapd를 두지 않는 서버라면 xfce4lxde 쪽을 골라야 한다.

기본 display manager 바꾸기

lightdm이 이미 있는 상태에서 gdm3가 들어오면 어느 쪽을 쓸지 debconf가 묻는다. 비대화식으로 설치하면 질문 없이 기존 선택(lightdm)이 그대로 유지되므로, 설치 후 확인이 필요하다.

$ sudo debconf-show gdm3
  shared/default-x-display-manager: lightdm
  gdm3/daemon_name: /usr/sbin/gdm3

$ cat /etc/X11/default-display-manager
/usr/sbin/lightdm

gdm3로 바꾸려면 sudo dpkg-reconfigure gdm3를 실행해 선택하면 된다. 선택 결과는 /etc/X11/default-display-manager 파일과 display-manager.service 심볼릭 링크 양쪽에 반영되며, systemd는 이 링크로 어떤 display manager를 띄울지 결정한다.

$ ls -l /etc/systemd/system/display-manager.service
... /etc/systemd/system/display-manager.service -> /lib/systemd/system/gdm.service

$ systemctl status display-manager --no-pager | head -2
● gdm.service - GNOME Display Manager
     Loaded: loaded (/usr/lib/systemd/system/gdm.service; indirect; preset: enabled)

gdm3 유닛 이름은 gdm.service이고 static이라 systemctl enable gdm3는 동작하지 않는다. 이 링크를 직접 확인하는 편이 확실하다.

Ubuntu 24.04 GDM 로그인 화면

Wayland 세션 확인

$ ls /usr/share/wayland-sessions /usr/share/xsessions
/usr/share/wayland-sessions:
ubuntu.desktop  ubuntu-wayland.desktop

/usr/share/xsessions:
ubuntu.desktop  ubuntu-xorg.desktop  xfce.desktop

$ loginctl show-session <세션ID> -p Type -p Class -p Active
Type=wayland
Class=user
Active=yes

로그인하면 Type=wayland, 즉 기본이 Wayland 세션이다. X11이 필요하면 로그인 화면에서 사용자를 선택한 뒤 톱니바퀴 버튼으로 “Ubuntu on Xorg”(ubuntu-xorg.desktop)를 고른다.

Ubuntu 24.04 Server에 설치한 GNOME 46 데스크톱

메모리 사용량 비교

메모리 8GB VM에서 자동 로그인으로 세션을 띄우고 free -m의 used를 비교했다. 데스크톱을 얹으면 세션 프로세스뿐 아니라 NetworkManager·cups·avahi 같은 서비스도 함께 올라온다.

상태used메모리 상위 프로세스
GUI 설치 전 (CLI)476 MB
Xfce만 설치, Xfce 세션811 MBxfwm4(119MB), Xorg(89MB), ibus-ui-gtk3(88MB)
둘 다 설치, Xfce 세션892 MBxfwm4(112MB), ibus-ui-gtk3(95MB), Xorg(90MB)
둘 다 설치, GNOME 세션992 MBgnome-shell(364MB), gjs(62MB), evolution-alarm(60MB)

같은 머신에서 셸만 바꿔 비교하면 GNOME 세션이 Xfce보다 100MB 정도 더 쓴다. gnome-shell 한 프로세스가 364MB로 Xfce 전체 세션 프로세스를 합친 것보다 크다.

CLI로 되돌리기

패키지는 그대로 두고 부팅만 CLI로 돌리려면 기본 타깃을 바꾼다. 재부팅 없이 즉시 적용하려면 isolate를 함께 쓴다.

$ sudo systemctl set-default multi-user.target
$ sudo systemctl isolate multi-user.target

디스크를 회수하려면 메타패키지를 지운 뒤 고아 의존성까지 정리한다. 메타패키지 자체는 의존성 목록일 뿐이라 지워봐야 7개만 빠진다.

$ sudo apt purge ubuntu-desktop ubuntu-desktop-minimal gdm3 xfce4 lightdm
...
0 upgraded, 0 newly installed, 7 to remove and 128 not upgraded.

$ dpkg -l | grep -c '^ii'
1835

$ sudo apt autoremove --purge
...
0 upgraded, 0 newly installed, 315 to remove and 128 not upgraded.

$ sudo snap remove --purge firefox thunderbird gnome-46-2404 gtk-common-themes mesa-2404
$ sudo apt clean

여기까지 하면 패키지 1842 → 1520개, 디스크 12GB → 10GB가 된다. 설치 전(671개, 6.6GB)에는 한참 못 미치는데, autoremove가 기본적으로 “설치된 다른 패키지가 recommends하는 패키지”를 보호하기 때문이다. 데스크톱 패키지들은 서로를 recommends로 물고 있어 이 규칙에 걸려 남는다.

$ sudo apt-get autoremove --purge --dry-run | grep -c '^Purg'
315
$ sudo apt-get autoremove --purge --dry-run \
      -o APT::AutoRemove::RecommendsImportant=false \
      -o APT::AutoRemove::SuggestsImportant=false | grep -c '^Purg'
1291

다만 이 옵션은 데스크톱과 무관하게 recommends로만 걸려 있던 서버 원래 패키지(systemd-timesyncd, systemd-oomd, ssh-import-id, bash-completion 등)까지 목록에 넣는다. 실행 전 --dry-run으로 목록을 반드시 확인할 것.

$ sudo systemctl set-default multi-user.target
$ sudo reboot

$ systemctl get-default
multi-user.target
$ systemctl is-active display-manager
inactive
$ free -m | sed -n 2p
Mem:            7940         448        7374           1         350        7492

메모리는 GUI 설치 전 수준(448MB)으로 돌아왔다.

주의사항

데스크톱을 설치하면 서버에 없던 서비스가 함께 켜진다. 설치 직후 상태를 확인해 두는 편이 좋다.

$ for u in NetworkManager cups cups-browsed bluetooth avahi-daemon ModemManager udisks2; do \
    printf "%-16s %-9s %s\n" $u "$(systemctl is-enabled $u)" "$(systemctl is-active $u)"; done
NetworkManager   enabled   active
cups             enabled   active
cups-browsed     enabled   active
bluetooth        enabled   inactive
avahi-daemon     enabled   active
ModemManager     enabled   active
udisks2          enabled   active

$ sudo ss -tulnp | grep 5353
udp UNCONN 0 0    0.0.0.0:5353    0.0.0.0:*  users:(("avahi-daemon",pid=708,fd=12))
udp UNCONN 0 0       [::]:5353       [::]:*  users:(("avahi-daemon",pid=708,fd=13))
  • avahi-daemon이 모든 인터페이스에서 mDNS(5353/udp)를 열고, cups·ModemManager처럼 서버에 불필요한 서비스도 함께 enabled 상태가 된다. 외부에 노출된 서버라면 설치 후 systemctl disable --now로 정리한다.
  • GNOME 세션은 24.04에서 Wayland가 기본이다. x11vnc·xdotool처럼 X11을 전제로 하는 도구를 쓰려면 로그인 화면에서 “Ubuntu on Xorg” 세션을 고르거나 /etc/gdm3/custom.conf에서 WaylandEnable=false로 막아야 한다.
  • --no-install-recommends를 붙이면 X 서버와 세션이 빠져 화면이 뜨지 않는다. 데스크톱 설치에서는 쓰지 말 것.
  • 디스크는 설치 용량 외에 apt 캐시가 다운로드 크기만큼 더 필요하다. ubuntu-desktop 기준 3GB 이상 여유를 두고, 설치 후 apt clean으로 캐시를 비운다.
  • 여기까지는 서버에 연결된 모니터로 쓰는 로컬 GUI다. 원격에서 데스크톱을 띄우려면 VNC나 NoMachine 같은 별도 설정이 필요하다.

마무리

Ubuntu 24.04 Server의 GUI 설치는 데스크톱 메타패키지 하나로 끝나지만, 어떤 메타패키지를 고르느냐에 따라 디스크 1.2GB와 3.3GB, 패키지 634개와 1418개로 갈린다. 메모리도 GNOME 세션이 Xfce보다 100MB가량 더 든다. GUI 도구만 띄우는 용도라면 xfce4 + LightDM 조합이 가장 가볍고, Ubuntu 기본 데스크톱이 필요하면 ubuntu-desktop-minimalubuntu-desktop보다 460MB 덜 쓴다. 설치 후에는 함께 켜진 서비스와 열린 포트를 확인해 서버에 필요 없는 것을 정리하는 편이 좋다.

참고

답글 남기기