X Desktop Group

freedesktop.org

XDG는 X Desktop Group의 약자로, freedesktop.org 의 옛 이름입니다.

freedesktop.org hosts the development of free and open source software, focused on interoperability and shared technology for open-source graphical and desktop systems.

freedesktop.org는 오픈 소스 그래픽 및 데스크탑 시스템을 위한 상호 운용성과 공유 기술에 중점을 둔 무료 및 오픈 소스 소프트웨어의 개발을 주도합니다.

관련 소프트웨어

xdg-user-dirs (XDG user directories)

printenv | grep XDG_
# XDG_SESSION_ID=57404
# XDG_RUNTIME_DIR=/run/user/1000
# XDG_SESSION_TYPE=tty
# XDG_SESSION_CLASS=user
man xdg-user-dirs-update
# xdg-user-dirs-update - Update XDG user dir configuration
man xdg-user-dir
# xdg-user-dir - Find an XDG user dir
xdg-user-dir DESKTOP
# /home/markruler/Desktop

전역 설정 파일은 기본적으로 /etc/xdg/user-dirs.conf에 있습니다.

# /etc/xdg/user-dirs.conf
# ...
# the XDG_CONFIG_HOME and/or XDG_CONFIG_DIRS to override this
enabled=True
filename_encoding=UTF-8
# /etc/xdg/user-dirs.defaults
# Default settings for user directories
#
# The values are relative pathnames from the home directory and
# will be translated on a per-path-element basis into the users locale
DESKTOP=Desktop
DOWNLOAD=Downloads
TEMPLATES=Templates
PUBLICSHARE=Public
DOCUMENTS=Documents
MUSIC=Music
PICTURES=Pictures
VIDEOS=Videos
# Another alternative is:
#MUSIC=Documents/Music
#PICTURES=Documents/Pictures
#VIDEOS=Documents/Videos

유저 설정 파일은 기본적으로 ~/.config/user-dirs.dirs에 있습니다.

# ~/.config/user-dirs.dirs
# This file is written by xdg-user-dirs-update
# If you want to change or add directories, just edit the line you're
# interested in. All local changes will be retained on the next run.
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
# absolute path. No other format is supported.
# 
XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_TEMPLATES_DIR="$HOME/Templates"
XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_MUSIC_DIR="$HOME/Music"
XDG_PICTURES_DIR="$HOME/Pictures"
XDG_VIDEOS_DIR="$HOME/Videos"
# ~/.config/user-dirs.locale
en_US

xdg-open (open)

open .
# xdg-open .
# ~/.config/mimeapps.list
[Default Applications]
text/html=google-chrome.desktop
x-scheme-handler/http=google-chrome.desktop
x-scheme-handler/https=google-chrome.desktop
...
[Added Associations]
image/png=gimp_gimp.desktop;pinta_pinta.desktop;shotwell-viewer.desktop;
text/x-csrc=code.desktop;
image/jpeg=shotwell-viewer.desktop;
application/sql=code.desktop;
text/markdown=code.desktop;
text/html=google-chrome.desktop;code.desktop;microsoft-edge.desktop;
text/plain=code.desktop;

X Window System

서버 버전에 X Window System 설치

  1. 서버 업데이트:

    sudo dnf update -y
    
  2. X Window System 설치:

    sudo dnf groupinstall "Server with GUI" -y
    
  3. 시작 레벨 설정: 설치 후, 시스템이 GUI 모드로 부팅되도록 기본 런레벨을 변경해야 합니다.

    sudo systemctl set-default graphical.target
    # Removed "/etc/systemd/system/default.target".
    # Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/graphical.target.
    
  4. 시스템 재부팅:

    sudo reboot
    

    재부팅 후, 서버가 GUI 모드로 부팅됩니다.

X Window System 삭제

  1. GUI 모드를 비활성화하고 기본 런레벨을 변경:

    sudo systemctl set-default multi-user.target
    # Removed "/etc/systemd/system/default.target".
    # Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/multi-user.target.
    
  2. X Window System 패키지 제거:

    sudo dnf groupremove "Server with GUI" -y
    
  3. 사용하지 않는 패키지 정리:

    sudo dnf autoremove -y
    
  4. 시스템 재부팅:

    sudo reboot
    

X11 Forwarding

# sshd_config
#X11Forwarding no
#X11DisplayOffset 10
#X11UseLocalhost yes
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
sshd -t | sshd -T
systemctl reload sshd
# macOS
brew install --cask xquartz
# 재시작
reboot
ssh -X user@host
# Activate the web console with: systemctl enable --now cockpit.socket
firefox
# No matching fbConfigs or visuals found

Firefox

혹은 xterm 으로 확인할 수도 있습니다.

# dnf provides xterm
dnf install xterm
xterm

GNOME 데스크탑

GNOME Desktop 은 GNU 프로젝트에서 만든 유용한 데스크톱 환경입니다.

아래 명령어들은 제가 데스크탑을 사용할 때 macOS처럼 독을 하단에 두기 위해 사용한 설정입니다.

gnome-shell --version
# GNOME Shell 41.8.1

gsettings set org.gnome.shell.extensions.dash-to-dock dock-position BOTTOM
gsettings set org.gnome.shell.extensions.dash-to-dock animation-time 0.2
gsettings set org.gnome.shell.extensions.dash-to-dock transparency-mode FIXED # 투명도 모드
gsettings set org.gnome.shell.extensions.dash-to-dock background-opacity 0.6 # 배경 투명도
gsettings set org.gnome.shell.extensions.dash-to-dock running-indicator-style DASHES # 실행 중인 앱 표시 형태
gsettings set org.gnome.shell.extensions.dash-to-dock intellihide-mode FOCUS_APPLICATION_WINDOWS
gsettings set org.gnome.shell.extensions.dash-to-dock dash-max-icon-size 32 # 범위: 16-64
gsettings set org.gnome.shell.extensions.dash-to-dock extend-height false # 화면에 아이콘이 꽉 차지 않을 때 여백을 두지 않음
gsettings set org.gnome.shell.extensions.dash-to-dock show-windows-preview true
gsettings set org.gnome.shell.extensions.dash-to-dock show-favorites true
gsettings set org.gnome.shell.extensions.dash-to-dock show-trash true
gsettings set org.gnome.shell.extensions.dash-to-dock show-mounts true
gsettings set org.gnome.shell.extensions.dash-to-dock multi-monitor true # 모니터가 여러 개일 때 어느 모니터에서든 dock을 볼 수 있음
gsettings set org.gnome.shell.extensions.dash-to-dock scroll-action cycle-windows # 아이콘 위에서 마우스 스크롤하면 여러 윈도우를 이동할 수 있음
gsettings set org.gnome.shell.extensions.dash-to-dock hot-keys true # `super`+`num`
gsettings set org.gnome.shell.extensions.dash-to-dock hotkeys-show-dock true
gsettings set org.gnome.shell.extensions.dash-to-dock force-straight-corner false

GUI Toolkit

리눅스에서 GUI 개발을 위한 가장 대표적인 툴킷 라이브러리는 2가지가 있습니다.

출처

GTK QT
지원언어 C, C++, Python 등 C++, Python 등
플랫폼 Linux, Windows, MacOS Linux, WIndows, MacOS
라이센스 LGPL2.1 LGPL, GPL, 상용 라이센스
대표 데스크탑 환경 GNOME, Xfce KDE

GTK: GIMP ToolKit

Qt

Qt(“cute"로 발음)는 GUI 프로그램 개발에 널리 쓰이는 크로스 플랫폼 소프트웨어입니다. 서버용 콘솔과 명령 줄 도구와 같은 CLI 프로그램 개발에도 사용됩니다. 그래픽 사용자 인터페이스를 사용하는 경우에는 Qt를 Widget toolkit 으로 분류합니다.2

GUI 데스크탑 환경과 관련된 추가 소프트웨어

VNC: Virtual Network Computing

RDP: Remote Desktop Protocol

참조


  1. Ask Ubuntu  ↩︎

  2. Qt - Wikipedia ↩︎