Set Display Manager (GDM/SDDM)

  • set-display-manager.sh
#!/usr/bin/env bash
set -e

CHOICE="${1:-}"

case "$CHOICE" in
    gdm)
        systemctl disable sddm || true
        systemctl enable gdm --force
        ;;
    sddm)
        systemctl disable gdm || true
        systemctl enable sddm --force
        ;;
    *)
        echo "Invalid choice: $CHOICE" >&2
        exit 1
        ;;
esac
  • switch-dm-gui.sh
#!/usr/bin/env bash

set -u

for cmd in zenity pkexec; do
    if ! command -v "$cmd" >/dev/null 2>&1; then
        zenity --error --title="오류" --text="'$cmd' 명령을 찾을 수 없습니다."
        exit 1
    fi
done

get_current_dm() {
    local target
    target=$(readlink -f /etc/systemd/system/display-manager.service 2>/dev/null || true)

    case "$target" in
        *gdm.service) echo "gdm" ;;
        *sddm.service) echo "sddm" ;;
        *) echo "unknown" ;;
    esac
}

CURRENT_DM=$(get_current_dm)

GDM_SELECTED="FALSE"
SDDM_SELECTED="FALSE"

case "$CURRENT_DM" in
    gdm) GDM_SELECTED="TRUE" ;;
    sddm) SDDM_SELECTED="TRUE" ;;
    *) GDM_SELECTED="TRUE" ;;
esac

CHOICE=$(
zenity --list \
    --radiolist \
    --title="디스플레이 매니저 선택" \
    --text="다음 부팅 때 사용할 디스플레이 매니저를 선택하세요." \
    --width=420 \
    --height=250 \
    --column="선택" \
    --column="디스플레이 매니저" \
    "$GDM_SELECTED" "gdm" \
    "$SDDM_SELECTED" "sddm"
)

if [ $? -ne 0 ] || [ -z "${CHOICE:-}" ]; then
    zenity --info --title="취소됨" --text="변경이 취소되었습니다."
    exit 0
fi

if pkexec ./set-display-manager.sh "$CHOICE"; then
    zenity --info \
        --title="적용 예약 완료" \
        --text="'$CHOICE'가 다음 부팅 때 적용되도록 설정했습니다.\n\n변경 사항은 재부팅 후 적용됩니다."
else
    zenity --error \
        --title="오류" \
        --text="설정 변경에 실패했습니다."
    exit 1
fi