# GUI System

## GUI desktop environment

There are several choices for the full featured [GUI](https://en.wikipedia.org/wiki/Graphical_user_interface) desktop environment on the Debian system.

| task package | popcon | size | description |
|:---|:---|:---|:---|
| `task-gnome-desktop` | @-@popcon1@-@ | @-@psize1@-@ | [GNOME](https://en.wikipedia.org/wiki/GNOME) desktop environment |
| `task-xfce-desktop` | @-@popcon1@-@ | @-@psize1@-@ | [Xfce](https://en.wikipedia.org/wiki/Xfce) desktop environment |
| `task-kde-desktop` | @-@popcon1@-@ | @-@psize1@-@ | [KDE Plasma](https://en.wikipedia.org/wiki/KDE_Plasma_5) desktop environment |
| `task-mate-desktop` | @-@popcon1@-@ | @-@psize1@-@ | [MATE](https://en.wikipedia.org/wiki/MATE_(software)) desktop environment |
| `task-cinnamon-desktop` | @-@popcon1@-@ | @-@psize1@-@ | [Cinnamon](https://en.wikipedia.org/wiki/Cinnamon_(desktop_environment)) desktop environment |
| `task-lxde-desktop` | @-@popcon1@-@ | @-@psize1@-@ | [LXDE](https://en.wikipedia.org/wiki/LXDE) desktop environment |
| `task-lxqt-desktop` | @-@popcon1@-@ | @-@psize1@-@ | [LXQt](https://en.wikipedia.org/wiki/LXQt) desktop environment |
| `task-gnome-flashback-desktop` | @-@popcon1@-@ | @-@psize1@-@ | [GNOME Flashback](https://en.wikipedia.org/wiki/GNOME#GNOME_Flashback) desktop environment |

List of desktop environment

> [!TIP]
> Dependency packages selected by a task metapackage may be out of sync with the latest package transition state under the Debian `unstable`/`testing` environment. For `task-gnome-desktop`, you may need to adjust package selections as follows:
>
> - Start `aptitude`(8) as `sudo aptitude -u`.
>
> - Move cursor to "Tasks" and press "Enter".
>
> - Move cursor to "End-user" press "Enter".
>
> - Move cursor to "GNOME" press "Enter".
>
> - Move cursor to `task-gnome-desktop` and press "Enter".
>
> - Move cursor to "Depends" and press "m" (manually selected).
>
> - Move cursor to "Recommends" and press "m" (manually selected).
>
> - Move cursor to "`task-gnome-desktop` and press "-". (drop)
>
> - Adjust selected packages while dropping problematic ones causing package conflicts.
>
> - Press "g" to start install.

This chapter will focus mostly on the default desktop environment of Debian: `task-gnome-desktop` offering [GNOME](https://en.wikipedia.org/wiki/GNOME) on [wayland](https://en.wikipedia.org/wiki/Wayland_(display_server_protocol)).

## GUI communication protocol

GUI communication protocol used on the GNOME desktop can be:

- [Wayland (display server protocol)](https://en.wikipedia.org/wiki/Wayland_(display_server_protocol)) (native)

- [X Window System core protocol](https://en.wikipedia.org/wiki/X_Window_System_core_protocol) (via `xwayland`)

Please check [freedesktop.org site for how Wayland architecture is different from X Window architecture](https://wayland.freedesktop.org/architecture.html).

From user's perspective, differences can be colloquially summarized as:

- Wayland is a same-host GUI communication protocol: new, simpler, faster, no setuid root binary

- X Window is a network-capable GUI communication protocol: traditional, complex, slower, setuid root binary

For applications using Wayland protocol, the access to their display contents from a remote host is supported by the [VNC](https://en.wikipedia.org/wiki/Virtual_Network_Computing) or [RDP](https://en.wikipedia.org/wiki/Remote_Desktop_Protocol). See [Remote desktop](#_remote_desktop)

Modern X servers have [the MIT Shared Memory Extension](https://en.wikipedia.org/wiki/MIT-SHM) and communicate with their local X clients using the local shared memory. This bypasses the network transparent [Xlib](https://en.wikipedia.org/wiki/Xlib) interprocess communication channel and gains performance. This situation was the [background](https://wayland.freedesktop.org/faq.html) of creating Wayland as a local-only GUI communication protocol.

Using the `xeyes` program started from the GNOME terminal, you can check GUI communication protocol used by each GUI application.

     $ xeyes

- If the mouse cursor is on an application such as "GNOME terminal" which uses Wayland display server protocol, eyes don't move with the mouse cursor.

- If the mouse cursor is on an application such as "xterm" which uses X Window System core protocol, eyes move with the mouse cursor exposing not-so-isolated nature of X Window architecture.

As of April 2021, many popular GUI applications such as GNOME and [LibreOffice (LO)](https://en.wikipedia.org/wiki/LibreOffice) applications have been migrated to the Wayland display server protocol. I see `xterm`, `gitk`, `chromium`, `firefox`, `gimp`, `dia`, and KDE applications still use X Window System core protocol.

> [!NOTE]
> For both the xwayland on Wayland or the native X Window System, the old X server configuration file "`/etc/X11/xorg.conf`" shouldn't exist on the system. The graphics and input devices are now configured by the kernel with [DRM](https://en.wikipedia.org/wiki/Direct_Rendering_Manager), [KMS](https://wiki.debian.org/KernelModesetting), and [udev](https://en.wikipedia.org/wiki/Udev). The native X server has been rewritten to use them. See "[modedb default video mode support](https://www.kernel.org/doc/html/latest/fb/modedb.html)" in the Linux kernel documentation.

## GUI infrastructure

Here are notable GUI infrastructure packages for the GNOME on Wayland environment.

| package | popcon | package size | description |
|:---|:---|:---|:---|
| `mutter` | @-@popcon1@-@ | @-@psize1@-@ | GNOME's [mutter](https://en.wikipedia.org/wiki/Mutter_(software)) window manager **\[auto\]** |
| `xwayland` | @-@popcon1@-@ | @-@psize1@-@ | An X server running on top of [wayland](https://en.wikipedia.org/wiki/Wayland_(display_server_protocol)) **\[auto\]** |
| `gnome-remote-desktop` | @-@popcon1@-@ | @-@psize1@-@ | Remote desktop daemon for GNOME using PipeWire **\[auto\]** |
| `gnome-tweaks` | @-@popcon1@-@ | @-@psize1@-@ | Advanced configuration settings for GNOME |
| `gnome-shell-extension-prefs` | @-@popcon1@-@ | @-@psize1@-@ | Tool to enable / disable GNOME Shell extensions |

List of notable GUI infrastructure packages

Here, "**\[auto\]**" means that these packages are automatically installed when `task-gnome-desktop` is installed.

> [!TIP]
> `gnome-tweaks` is the indispensable configuration utility. For example:
>
> - You can force "Over-Amplification" of sound volume from "General".
>
> - You can force "Caps" to become "Esc" from "Keyboard & Mouse" -\> "Keyboard" -\> "Additional Layout Option".

> [!TIP]
> Detail features of GNOME desktop environment can be configured with utilities started by typing "`settings`", "`tweaks`", or "`extensions`" after pressing `Super`-key.

## GUI applications

Many useful GUI applications are available on Debian now. Installing software packages such as `scribus` (KDE) on GNOME desktop environment are quite acceptable since corresponding functionality is not available under GNOME desktop environment. But installing too many packages with duplicated functionalities may clutter your system.

Here is a list of GUI applications which caught my eyes.

| package | popcon | package size | type | description |
|:---|:---|:---|:---|:---|
| `evolution` | @-@popcon1@-@ | @-@psize1@-@ | GNOME | Personal information Management (groupware and email) |
| `thunderbird` | @-@popcon1@-@ | @-@psize1@-@ | GTK | Email client ([Mozilla Thunderbird](https://en.wikipedia.org/wiki/Mozilla_Thunderbird)) |
| `kontact` | @-@popcon1@-@ | @-@psize1@-@ | KDE | Personal information Management (groupware and email) |
| `libreoffice-writer` | @-@popcon1@-@ | @-@psize1@-@ | LO | word processor |
| `abiword` | @-@popcon1@-@ | @-@psize1@-@ | GNOME | word processor |
| `calligrawords` | @-@popcon1@-@ | @-@psize1@-@ | KDE | word processor |
| `scribus` | @-@popcon1@-@ | @-@psize1@-@ | KDE | [desktop publishing](https://en.wikipedia.org/wiki/Desktop_publishing) editor to edit [PDF](https://en.wikipedia.org/wiki/PDF) files |
| `glabels` | @-@popcon1@-@ | @-@psize1@-@ | GNOME | label editor |
| `libreoffice-calc` | @-@popcon1@-@ | @-@psize1@-@ | LO | spreadsheet |
| `gnumeric` | @-@popcon1@-@ | @-@psize1@-@ | GNOME | spreadsheet |
| `calligrasheets` | @-@popcon1@-@ | @-@psize1@-@ | KDE | spreadsheet |
| `libreoffice-impress` | @-@popcon1@-@ | @-@psize1@-@ | LO | presentation |
| `calligrastage` | @-@popcon1@-@ | @-@psize1@-@ | KDE | presentation |
| `libreoffice-base` | @-@popcon1@-@ | @-@psize1@-@ | LO | database management |
| `kexi` | @-@popcon1@-@ | @-@psize1@-@ | KDE | database management |
| `libreoffice-draw` | @-@popcon1@-@ | @-@psize1@-@ | LO | vector graphics editor (draw) |
| `inkscape` | @-@popcon1@-@ | @-@psize1@-@ | GNOME | vector graphics editor (draw) |
| `karbon` | @-@popcon1@-@ | @-@psize1@-@ | KDE | vector graphics editor (draw) |
| `dia` | @-@popcon1@-@ | @-@psize1@-@ | GTK | flowchart and diagram editor |
| `gimp` | @-@popcon1@-@ | @-@psize1@-@ | GTK | bitmap graphics editor (paint) |
| `shotwell` | @-@popcon1@-@ | @-@psize1@-@ | GTK | digital photo organizer |
| `digikam` | @-@popcon1@-@ | @-@psize1@-@ | KDE | digital photo organizer |
| `darktable` | @-@popcon1@-@ | @-@psize1@-@ | GTK | lighttable and darkroom for photographers |
| `gnome-video-trimmer` | @-@popcon1@-@ | @-@psize1@-@ | GNOME | lossless cutting of video files |
| `kdenlive` | @-@popcon1@-@ | @-@psize1@-@ | KDE | non-linear video editor |
| `shotcut` | @-@popcon1@-@ | @-@psize1@-@ | Qt-app | non-linear video editor |
| `openshot-qt` | @-@popcon1@-@ | @-@psize1@-@ | Qt-app | non-linear video editor |
| `flowblade` | @-@popcon1@-@ | @-@psize1@-@ | GTK | non-linear video editor |
| `planner` | @-@popcon1@-@ | @-@psize1@-@ | GNOME | project management |
| `calligraplan` | @-@popcon1@-@ | @-@psize1@-@ | KDE | project management |
| `gnucash` | @-@popcon1@-@ | @-@psize1@-@ | GNOME | personal accounting |
| `homebank` | @-@popcon1@-@ | @-@psize1@-@ | GTK | personal accounting |
| `kmymoney` | @-@popcon1@-@ | @-@psize1@-@ | KDE | personal accounting |
| `frescobaldi` | @-@popcon1@-@ | @-@psize1@-@ | Qt-app | LilyPond sheet music text editor |
| `librecad` | @-@popcon1@-@ | @-@psize1@-@ | Qt-app | computer-aided design (CAD) system (2D) |
| `freecad` | @-@popcon1@-@ | @-@psize1@-@ | Qt-app | computer-aided design (CAD) system (3D) |
| `kicad` | @-@popcon1@-@ | @-@psize1@-@ | GTK | electronic schematic and PCB design software |
| `xsane` | @-@popcon1@-@ | @-@psize1@-@ | GTK | scanner frontend |
| `libreoffice-math` | @-@popcon1@-@ | @-@psize1@-@ | LO | mathematical equation/formula editor |
| `calibre` | @-@popcon1@-@ | @-@psize1@-@ | KDE | e-book converter and library management |
| `fbreader` | @-@popcon1@-@ | @-@psize1@-@ | GTK | e-book reader |
| `evince` | @-@popcon1@-@ | @-@psize1@-@ | GNOME | document(pdf) viewer |
| `okular` | @-@popcon1@-@ | @-@psize1@-@ | KDE | document(pdf) viewer |
| `x11-apps` | @-@popcon1@-@ | @-@psize1@-@ | pure X-app | `xeyes`(1), etc. |
| `x11-utils` | @-@popcon1@-@ | @-@psize1@-@ | pure X-app | `xev`(1), `xwininfo`(1), etc. |

List of notable GUI applications

## User directories

Default names for user directories such as "`~/Desktop`", "`~/Documents`", ..., used by the Desktop environment depend on the locale used for the system installation. You can reset them to the English ones by:

     $ LANGUAGE=C xdg-user-dirs-update --force 

Then you manually move all the data to the newer directories. See `xdg-user-dirs-update`(1).

You can also set them to any names by editing "`~/.config/user-dirs.dirs`". See `user-dirs.dirs`(5).

## Fonts

Many useful scalable fonts are available for users on Debian. User's concern is how to avoid redundancy and how to configure parts of installed fonts to be disabled. Otherwise, useless font choices may clutter your GUI application menus.

Debian system uses [FreeType](https://freetype.org) 2.0 library to rasterise many scalable font formats for screen and print:

- [Type 1 (PostScript) fonts](https://en.wikipedia.org/wiki/PostScript_fonts#Type_1) which use cubic [Bézier curves](https://en.wikipedia.org/wiki/Bézier_curve) (almost obsolete format)

- [TrueType fonts](https://en.wikipedia.org/wiki/TrueType) which use quadratic [Bézier curves](https://en.wikipedia.org/wiki/Bézier_curve) (good choice format)

- [OpenType fonts](https://en.wikipedia.org/wiki/OpenType) which use cubic [Bézier curves](https://en.wikipedia.org/wiki/Bézier_curve) (best choice format)

### Basic fonts

The following table is compiled in the hope to help users to choose appropriate scalable fonts with clear understanding of the metric compatibility and the glyph coverage. Most fonts cover all Latin, Greek, and Cyril characters. The final choice of activated fonts can also be affected by your aesthetics. These fonts can be used for the screen display or for the paper printing.

| package | popcon | size | [sans](https://en.wikipedia.org/wiki/Sans-serif) | [serif](https://en.wikipedia.org/wiki/Serif) | [mono](https://en.wikipedia.org/wiki/Monospaced_font) | note on font |
|:---|:---|:---|:---|:---|:---|:---|
| fonts-cantarell | @-@popcon1@-@ | @-@psize1@-@ | 59 | \- | \- | [Cantarell](https://en.wikipedia.org/wiki/Cantarell_(typeface)) (GNOME 3, display) |
| fonts-noto | @-@popcon1@-@ | @-@psize1@-@ | 61 | 63 | 40 | [Noto fonts](https://en.wikipedia.org/wiki/Noto_fonts) (Google, multi-lingual with CJK) |
| fonts-dejavu | @-@popcon1@-@ | @-@psize1@-@ | 58 | 68 | 40 | [DejaVu](https://en.wikipedia.org/wiki/DejaVu_fonts) (GNOME 2, MCM:[Verdana](https://en.wikipedia.org/wiki/Verdana), extended [Bitstream Vera](https://en.wikipedia.org/wiki/Bitstream_Vera)) |
| fonts-liberation2 | @-@popcon1@-@ | @-@psize1@-@ | 56 | 60 | 40 | [Liberation fonts](https://en.wikipedia.org/wiki/Liberation_fonts) for [LibreOffice](https://en.wikipedia.org/wiki/LibreOffice) (Red Hat, MCMATC) |
| fonts-croscore | @-@popcon1@-@ | @-@psize1@-@ | 56 | 60 | 40 | [Chrome OS: Arimo, Tinos and Cousine](https://en.wikipedia.org/wiki/Croscore_fonts) (Google, MCMATC) |
| fonts-crosextra-carlito | @-@popcon1@-@ | @-@psize1@-@ | 57 | \- | \- | [Chrome OS: Carlito](https://en.wikipedia.org/wiki/Croscore_fonts) (Google, MCM:[Calibri](https://en.wikipedia.org/wiki/Calibri) ) |
| fonts-crosextra-caladea | @-@popcon1@-@ | @-@psize1@-@ | \- | 55 | \- | [Chrome OS: Caladea](https://en.wikipedia.org/wiki/Croscore_fonts) (Google, MCM:[Cambria](https://en.wikipedia.org/wiki/Cambria_(typeface)) ) (Latin only ) |
| fonts-freefont-ttf | @-@popcon1@-@ | @-@psize1@-@ | 57 | 59 | 40 | [GNU FreeFont](https://en.wikipedia.org/wiki/GNU_FreeFont) (extended [URW Nimbus](https://en.wikipedia.org/wiki/URW_Type_Foundry)) |
| fonts-quicksand | @-@popcon1@-@ | @-@psize1@-@ | 56 | \- | \- | Debian task-desktop, [Quicksand](https://fonts.google.com/specimen/Quicksand) (display, Latin only) |
| fonts-hack | @-@popcon1@-@ | @-@psize1@-@ | \- | \- | 40 P | A typeface designed for source code [Hack](https://sourcefoundry.org/hack/) (Facebook) |
| fonts-sil-gentiumplus | @-@popcon1@-@ | @-@psize1@-@ | \- | 54 | \- | [Gentium SIL](https://en.wikipedia.org/wiki/Gentium) |
| fonts-sil-charis | @-@popcon1@-@ | @-@psize1@-@ | \- | 59 | \- | [Charis SIL](https://en.wikipedia.org/wiki/Charis_SIL) |
| fonts-urw-base35 | @-@popcon1@-@ | @-@psize1@-@ | 56 | 60 | 40 | [URW Nimbus](https://en.wikipedia.org/wiki/URW_Type_Foundry) ([Nimbus Sans](https://en.wikipedia.org/wiki/Nimbus_Sans), [Roman No. 9 L](https://en.wikipedia.org/wiki/Nimbus_Roman_No._9_L), [Mono L](https://en.wikipedia.org/wiki/Nimbus_Mono_L), MCAHTC) |
| fonts-ubuntu | @-@popcon1@-@ | @-@psize1@-@ | 58 | \- | 33 P | [Ubuntu fonts](https://en.wikipedia.org/wiki/Ubuntu_(typeface)) (display) |
| fonts-terminus | @-@popcon1@-@ | @-@psize1@-@ | \- | \- | 33 | [Cool retro terminal fonts](https://github.com/Swordfish90/cool-retro-term) |
| ttf-mscorefonts-installer | @-@popcon1@-@ | @-@psize1@-@ | 56? | 60 | 40 | Downloader of Microsoft non-free fonts (see below) |

List of notable [TrueType](https://en.wikipedia.org/wiki/TrueType) and [OpenType](https://en.wikipedia.org/wiki/OpenType) fonts

Here:

- "MCM" stands for "metric compatible with fonts provided by Microsoft"

- "MCMATC" stands for "metric compatible with fonts provided by Microsoft: [Arial](https://en.wikipedia.org/wiki/Arial), [Times New Roman](https://en.wikipedia.org/wiki/Times_New_Roman), [Courier New](https://en.wikipedia.org/wiki/Courier_(typeface))"

- "MCAHTC" stands for "metric compatible with fonts provided by [Adobe](https://en.wikipedia.org/wiki/PostScript_fonts): Helvetica, Times, Courier"

- Numbers in font type columns stands for the rough relative "M" width for the same point size font.

- "P" in mono font type columns stands for its usability for programming having clearly distinguishable "0"/"O" and "1"/"I"/"l".

- The `ttf-mscorefonts-installer` package downloads Microsoft's "[Core fonts for the Web](https://en.wikipedia.org/wiki/Core_fonts_for_the_Web)" and installs [Arial](https://en.wikipedia.org/wiki/Arial), [Times New Roman](https://en.wikipedia.org/wiki/Times_New_Roman), [Courier New](https://en.wikipedia.org/wiki/Courier_(typeface)), [Verdana](https://en.wikipedia.org/wiki/Verdana), ... . These installed font data are non-free data.

Many free Latin fonts have their lineage traced to [URW Nimbus](https://en.wikipedia.org/wiki/URW_Type_Foundry) family or [Bitstream Vera](https://en.wikipedia.org/wiki/Bitstream_Vera).

> [!TIP]
> If your locale needs fonts not covered well by the above fonts, please use aptitude to check under task packages listed under "Tasks" -\> "Localization". The font packages listed as "Depends:" or "Recommends:" in the localization task packages are the primary candidates.

### Font rasterization

Debian uses [FreeType](https://freetype.org) to rasterize fonts. Its font choice infrastructure is provided by the [Fontconfig](https://en.wikipedia.org/wiki/Fontconfig) font configuration library.

| package | popcon | size | description |
|:---|:---|:---|:---|
| `libfreetype6` | @-@popcon1@-@ | @-@psize1@-@ | [FreeType](https://freetype.org) font rasterization library |
| `libfontconfig1` | @-@popcon1@-@ | @-@psize1@-@ | [Fontconfig](https://en.wikipedia.org/wiki/Fontconfig) font configuration library |
| `fontconfig` | @-@popcon1@-@ | @-@psize1@-@ | `fc-*`: CLI commands for [Fontconfig](https://en.wikipedia.org/wiki/Fontconfig) |
| `font-manager` | @-@popcon1@-@ | @-@psize1@-@ | [Font Manager](https://github.com/FontManager/font-manager): GUI command for [Fontconfig](https://en.wikipedia.org/wiki/Fontconfig) |
| `nautilus-font-manager` | @-@popcon1@-@ | @-@psize1@-@ | Nautilus extension for [Font Manager](https://github.com/FontManager/font-manager) |

List of notable font environment and related packages

> [!TIP]
> Some font packages such as `fonts-noto*` install too many fonts. You may also want to keep some font packages installed but disabled under the normal use situation. The multiple [glyphs](https://en.wikipedia.org/wiki/Glyph) are expected for some [Unicode](https://en.wikipedia.org/wiki/Unicode) code points due to [Han unification](https://en.wikipedia.org/wiki/Han_unification) and unwanted gliphs may be chosen by the unconfigured Fontconfig library. One of the most annoying case is "U+3001 IDEOGRAPHIC COMMA" and "U+3002 IDEOGRAPHIC FULL STOP" among CJK countries. You can avoid this problematic situation easily by configuring font availability using Font Manager GUI ([font-manager](https://github.com/FontManager/font-manager)).

You can list font configuration state from the command line, too.

- "`fc-match(1)`" for fontconfig font default

- "`fc-list(1)`" for available fontconfig fonts

You can configure font configuration state from the text editor but this is non-trivial. See `fonts.conf`(5).

## Sandbox

Many mostly GUI applications on Linux are available in binary formats from non-Debian sources.

- [ AppImage -- Linux apps that run anywhere ](https://appimage.org/)

- [ FLATHUB -- Apps for Linux, right here ](https://www.flathub.org/)

- [ snapcraft -- The app store for Linux ](https://snapcraft.io/)

> [!WARNING]
> Binaries from these sites may include proprietary non-free software packages.

There is some raison d'être for these binary format distributions for Free Software aficionados using Debian since these can accommodate clean set of libraries used for each application by the respective upstream developer independent of the ones provided by Debian.

The inherent risk of running external binaries can be reduced by using the [sandbox environment](https://en.wikipedia.org/wiki/Sandbox_(computer_security)) which leverages modern Linux security features (see [???](#_linux_security_features)).

- For binaries from AppImage and some upstream sites, run them in [ firejail ](https://firejail.wordpress.com) with [manual configuration](https://firejail.wordpress.com/documentation-2/appimage-support/).

- For binaries from FLATHUB, run them in [ Flatpak ](https://en.wikipedia.org/wiki/Flatpak). (No manual configuration required.)

- For binaries from snapcraft, run them in [ Snap ](https://en.wikipedia.org/wiki/Snap_(software)). (No manual configuration required. Compatible with daemon programs.)

The `xdg-desktop-portal` package provides a standardized API to common desktop features. See [ xdg-desktop-portal (flatpak) ](https://github.com/flatpak/xdg-desktop-portal) and [ xdg-desktop-portal (snap) ](https://snapcraft.io/docs/xdg-desktop-portals).

| package | popcon | size | description |
|:---|:---|:---|:---|
| `flatpak` | @-@popcon1@-@ | @-@psize1@-@ | [Flatpak](https://en.wikipedia.org/wiki/Flatpak) application deployment framework for desktop apps |
| `gnome-software-plugin-flatpak` | @-@popcon1@-@ | @-@psize1@-@ | Flatpak support for GNOME Software |
| `snapd` | @-@popcon1@-@ | @-@psize1@-@ | Daemon and tooling that enable [snap](https://en.wikipedia.org/wiki/Snap_(software)) packages |
| `gnome-software-plugin-snap` | @-@popcon1@-@ | @-@psize1@-@ | Snap support for GNOME Software |
| `xdg-desktop-portal` | @-@popcon1@-@ | @-@psize1@-@ | desktop integration portal for Flatpak and Snap |
| `xdg-desktop-portal-gtk` | @-@popcon1@-@ | @-@psize1@-@ | [ xdg-desktop-portal backend for gtk (GNOME) ](https://github.com/flatpak/xdg-desktop-portal-gtk) |
| `xdg-desktop-portal-kde` | @-@popcon1@-@ | @-@psize1@-@ | [ xdg-desktop-portal backend for Qt (KDE) ](https://github.com/KDE/xdg-desktop-portal-kde) |
| `xdg-desktop-portal-wlr` | @-@popcon1@-@ | @-@psize1@-@ | [ xdg-desktop-portal backend for wlroots (Wayland) ](https://github.com/emersion/xdg-desktop-portal-wlr) |
| `firejail` | @-@popcon1@-@ | @-@psize1@-@ | a SUID security sandbox program [firejail](https://firejail.wordpress.com) for use with [AppImage](https://en.wikipedia.org/wiki/AppImage) |

List of notable sandbox environment and related packages

This sandbox environment technology is very much like apps on smart phone OS where apps are executed under controlled resource accesses.

Some large GUI applications such as web browsers on Debian also use sandbox environment technology internally to make them more secure.

## Remote desktop

| package | popcon | size | protocols | description |
|:---|:---|:---|:---|:---|
| `gnome-remote-desktop` | @-@popcon1@-@ | @-@psize1@-@ | [RDP](https://en.wikipedia.org/wiki/Remote_Desktop_Protocol) | [GNOME Remote Desktop](https://wiki.gnome.org/Projects/Mutter/RemoteDesktop) server |
| `xrdp` | @-@popcon1@-@ | @-@psize1@-@ | [RDP](https://en.wikipedia.org/wiki/Remote_Desktop_Protocol) | [xrdp](https://en.wikipedia.org/wiki/Xrdp), Remote Desktop Protocol (RDP) server |
| `x11vnc` | @-@popcon1@-@ | @-@psize1@-@ | [RFB (VNC)](https://en.wikipedia.org/wiki/RFB_protocol) | [x11vnc](https://en.wikipedia.org/wiki/X11vnc), Remote Framebuffer Protocol (VNC) server |
| `tigervnc-standalone-server` | @-@popcon1@-@ | @-@psize1@-@ | [RFB (VNC)](https://en.wikipedia.org/wiki/RFB_protocol) | [TigerVNC](https://en.wikipedia.org/wiki/TigerVNC), Remote Framebuffer Protocol (VNC) server |
| `gnome-connections` | @-@popcon1@-@ | @-@psize1@-@ | [RDP](https://en.wikipedia.org/wiki/Remote_Desktop_Protocol), [RFB (VNC)](https://en.wikipedia.org/wiki/RFB_protocol) | [GNOME remote desktop client](https://apps.gnome.org/Connections/) |
| `vinagre` | @-@popcon1@-@ | @-@psize1@-@ | [RDP](https://en.wikipedia.org/wiki/Remote_Desktop_Protocol), [RFB (VNC)](https://en.wikipedia.org/wiki/RFB_protocol), [SPICE](https://en.wikipedia.org/wiki/Simple_Protocol_for_Independent_Computing_Environments), [SSH](https://en.wikipedia.org/wiki/Secure_Shell) | [Vinagre: GNOME remote desktop client](https://en.wikipedia.org/wiki/Vinagre) |
| `remmina` | @-@popcon1@-@ | @-@psize1@-@ | [RDP](https://en.wikipedia.org/wiki/Remote_Desktop_Protocol), [RFB (VNC)](https://en.wikipedia.org/wiki/RFB_protocol), [SPICE](https://en.wikipedia.org/wiki/Simple_Protocol_for_Independent_Computing_Environments), [SSH](https://en.wikipedia.org/wiki/Secure_Shell), ... | [Remmina: GTK remote desktop client](https://en.wikipedia.org/wiki/Remmina) |
| `krdc` | @-@popcon1@-@ | @-@psize1@-@ | [RDP](https://en.wikipedia.org/wiki/Remote_Desktop_Protocol), [RFB (VNC)](https://en.wikipedia.org/wiki/RFB_protocol) | [KRDC: KDE remote desktop client](https://apps.kde.org/krdc/) |
| `virt-viewer` | @-@popcon1@-@ | @-@psize1@-@ | [RFB (VNC)](https://en.wikipedia.org/wiki/RFB_protocol), [SPICE](https://en.wikipedia.org/wiki/Simple_Protocol_for_Independent_Computing_Environments) | [Virtual Machine Manager](https://en.wikipedia.org/wiki/Virt-manager)'s GUI display client of guest OS |

List of notable remote access server

## X server connection

There are several ways to connect from an application on a remote host to the X server including `xwayland` on the local host.

| package | popcon | size | command | description |
|:---|:---|:---|:---|:---|
| `openssh-server` | @-@popcon1@-@ | @-@psize1@-@ | `sshd` with option `X11-forwarding` | [SSH](https://en.wikipedia.org/wiki/Secure_Shell) server (secure) |
| `openssh-client` | @-@popcon1@-@ | @-@psize1@-@ | `ssh -X` | [SSH](https://en.wikipedia.org/wiki/Secure_Shell) client (secure) |
| `xauth` | @-@popcon1@-@ | @-@psize1@-@ | `xauth` | X authority file utility |
| `x11-xserver-utils` | @-@popcon1@-@ | @-@psize1@-@ | `xhost` | server access control for X |

List of connection methods to the X server

### X server local connection

Access to the local X server by the local applications which use X core protocol can be locally connected through a local UNIX domain socket. This can be authorized by the authority file holding [access cookie](https://en.wikipedia.org/wiki/X_Window_authorization#Cookie-based_access). The authority file location is identified by the "`$XAUTHORITY`" environment variable and X display is identified by the "`$DISPLAY`" environment variable. Since these are normally set automatically, no special action is needed, e.g. "`gitk`" as the following.

    username $ gitk

> [!NOTE]
> For `xwayland`, `XAUTHORITY` holds value like "`/run/user/1000/.mutter-Xwaylandauth.YVSU30`".

### X server remote connection

Access to the local X server display from the remote applications which use X core protocol is supported by using the X11 forwarding feature.

- Open an `gnome-terminal` on the local host.

- Run `ssh`(1) with `-X` option to establish a connection with the remote site as the following.

      localname @ localhost $ ssh -q -X loginname@remotehost.domain
      Password:

- Run an X application command, e.g. "`gitk`", on the remote site as the following.

      loginname @ remotehost $ gitk

This method can display the output from a remote X client as if it were locally connected through a local UNIX domain socket.

See [???](#_the_remote_access_server_and_utilities_ssh) for SSH/SSHD.

> [!WARNING]
> A remote [TCP](https://en.wikipedia.org/wiki/Transmission_Control_Protocol)/[IP](https://en.wikipedia.org/wiki/Internet_Protocol) connection to the X server is disabled by default on the Debian system for security reasons. Don't enable them by simply setting "`xhost +`" nor by enabling [XDMCP connection](https://en.wikipedia.org/wiki/X_display_manager), if you can avoid it.

### X server chroot connection

Access to the X server by the applications which use X core protocol and run on the same host but in an environment such as chroot where the authority file is not accessible, can be authorized securely with `xhost` by using the [User-based access](https://en.wikipedia.org/wiki/X_Window_authorization#User-based_access), e.g. "`gitk`" as the following.

    username $ xhost + si:localuser:root ; sudo chroot /path/to
    # cd /src
    # gitk
    # exit
    username $ xhost -

## Clipboard

For clipping text to clipboard, see [???](#_mouse_operations).

For clipping graphics to clipboard, see [???](#_graphic_data_tools).

Some CLI commands can manipulate character clipboard (PRIMARY and CLIPBOARD), too.

| package | popcon | package size | target | description |
|:---|:---|:---|:---|:---|
| `xsel` | @-@popcon1@-@ | @-@psize1@-@ | X | command line interface to X selections (clipboard) |
| `xclip` | @-@popcon1@-@ | @-@psize1@-@ | X | command line interface to X selections (clipboard) |
| `wl-clipboard` | @-@popcon1@-@ | @-@psize1@-@ | Wayland | `wl-copy` `wl-paste`: command line interface to [Wayland clipboard](https://wiki.gnome.org/Initiatives/Wayland/PrimarySelection) |
| `gpm` | @-@popcon1@-@ | @-@psize1@-@ | Linux console | a daemon that captures mouse events on Linux console |

List of programs related to manipulating character clipboard