Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Главная страница

Что это и зачем?

Это моя маленькая база знаний. Здесь я сохраняю небольшие заметки, инструкции или гайды, к которым периодически нужен доступ.

Перед началом

  1. НЕ относитесь к этой вики как к универсальному источнику знаний. Материалы может содержать ошибки или неточности.
  2. Местоимения “я” и его формы, которые встречаются на страницах, подразумевают непосредственно меня, если не указано иное.
  3. В целом, материалы подходят для разных систем, но по большей части не проверялись на других дистрибутивах. Команды, которые содержатся на страницах вики, предназначены для Arch Linux. Замените пакетный менеджер pacman, систему инициализации systemd и другие специфичные для этого дистрибутива компоненты на те, что используются в вашей системе. Это также означает, что используются последние версии программ, если не указано иное.

Разделы

РазделОписание
🐧 LinuxГайды и инструкции про Linux
⚙️ Приложения и утилитыНекоторые сценарии использования разных программ
✨ РазноеВсё остальное. Полезные (или не очень) гайды

Структура вики почти наверное поменяется в будущем.

Использование материалов вики

Материалы вики являются общественным достоянием, если не указано иное. Вы можете свободно использовать, копировать и распространять их без каких‑либо ограничений.

Ссылки на внешние ресурсы и цитаты из других источников могут охраняться авторским правом. Перед их использованием проверьте условия лицензии соответствующего ресурса.

Не является юридической консультацией.

Кастомизация системы

Одно из самых больших преимуществ Linux — возможность полностью настроить систему под себя. В этом гайде описана кастомизация системы. Часто этот процесс называется “ricing”. Конфигурационные файлы часто называют “dotfiles” (дотфайлы, или просто доты).

Экосистема рабочих столов Linux постоянно расширяется, появляются новые интересные проекты. Здесь перечислены не все программы, а наиболее популярные или те, которые я сам использую или использовал ранее — на деле их гораздо больше. При желании можно разработать что-то свое.

Графическое окружение

Настроить под себя можно практически любое окружение рабочего стола, оконный менеджер или Wayland-композитор.

Xorg — реализация X Window System (часто называют “X”, “иксы”). Является централизованным и работает вместе с оконным менеджером и (опционально) композитором.

Wayland — более современная реализация графического сервера. Более безопасен, чем Xorg, часто более эффективен, предоставляет более широкие настройки. В отличие от X, каждый Wayland-композитор реализует протоколы самостоятельно, т.е. нет центрального компонента.

Окружения рабочего стола

  • GNOME (X11, Wayland) — простое в использовании окружение, основанное на GTK.
  • KDE Plasma (X11, Wayland) — окружение рабочего стола, основанное на Qt.
  • Cinnamon (X11, Wayland) — окружение, разработанное командой Linux Mint.
  • Xfce (X11) — минималистичное и производительное оконное окружение.

Оконные менеджеры (X11)

  • bspwm — тайловый оконный менеджер на основе двоичного разбиения пространства.
  • awesomewm — широко кастомизируемый оконный менеджер, настраиваемый на Lua.
  • i3 — ручной тайловый оконный менеджер.
  • Qtile — тайловый оконный менеджер, написанный и настраиваемый на Python.

Композиторы (Wayland)

  • niri — скроллинговый тайлинг.
  • Hyprland — современный, широко настраиваемый, тайловый Wayland-композитор.
  • Sway — ручной тайловый композитор, полностью совместимый с i3.

Оболочка рабочего стола

Если вы используете полноценные окружения рабочего стола, то, скорее всего, не нуждаетесь в установке дополнительный компонентов, таких как панели или лаунчеры, так как окружение уже поставляет их. Эти компоненты называют оболочкой (не стоит путать с оболочкой командной строки). Оконные менеджеры и отдельные Wayland-композиторы зачастую не реализуют этих компонентов, поэтому их нужно устанавливать и настраивать отдельно.

Полноценные системы виджетов

Полноценные системы виджетов позволяют создавать и настраивать различные компоненты рабочего стола, используя один инструмент. Как правило, подразумевается, что пользователь сам напишет (запрограммирует) эти компоненты, используя встроенный язык и/или библиотеки. Сложность этих языков и библиотек варьируется.

  • Astal (X11, Wayland) — фреймворк для создания GTK-виджетов рабочего стола, поддерживающий разные языки программирования.
  • eww (X11, Wayland) — автономная система виджетов на языке Rust, позволяющая реализовать собственные виджеты в любом оконном менеджере.
  • Fabric (X11, Wayland) — система виджетов на Python.
  • QuickShell (X11, Wayland) — тулкит для создания своих виджетов, панелей, блокировщиков экрана и проч. на основе QtQuick и QML.

Панели

  • Polybar (X11) — быстрая и простая в использовании панель.
  • Waybar (Wayland) — широко настраиваемая панель для различных Wayland-композиторов.
  • Yambar (X11, Wayland) — модульная панель, вдохновлённая Polybar.
  • Ironbar (Wayland) – кастомизируемая полнофункциональная панель для Wayland-композиторов, написанная на GTK4 и Rust.
  • Ashell (Wayland) — готовая к использованию и простая в настройке панель для Hyprland и Niri.

Уведомления

  • dunst (X11, Wayland) — легковесный и настраиваемый демон сервер.
  • mako (X11, Wayland) — простой демон уведомлений.
  • Sway Notification Center (Wayland) — демон уведомлений с центром управления.

Экраны блокировки

  • i3lock (X11) — простой экран блокировки.
    • i3lock-color — форк i3lock, добавляющий множество новых функций.
  • swaylock (Wayland) — простой экран блокировки для Wayland-композиторов.
    • swaylock-effects — форк swaylock, добавляющий причудливые эффекты.
  • gtklock — экран блокировки для Wayland, основанный на GTK.
  • Hyprlock — экран блокировки Hyprland (также работает с другими композиторами) с графическим ускорением.

Лаунчеры

  • dmenu (X11) — простой вертикальный лаунчер приложений.
  • rofi (X11, Wayland) — лаунчер, динамическое меню и переключатель окон.
  • wofi (Wayland) — лаунчер для Wayland-композиторов.
  • tofi (Wayland) — минималистичный лаунчер с упором на скорость.

Обои

  • feh (X11) — просмотрщик изображений с возможностью устанавливать обои.
  • swaybg (Wayland) — простая утилита для установки обоев.
  • Hyprpaper (Wayland) — быстрая утилита для отображения обоев с поддержкой IPC.
  • awww (ранее swww) (Wayland) — эффективный демон обоев для Wayland со множеством функций, контролируемый при помощи IPC.
  • mpvpaper (Wayland) — позволяет при помощи плеера mpv установить на обои любое видео.

Скриншоты

  • scrot (X11) – утилита командной строки для снимков экрана.
  • xsnip (X11) — минималистичный и удобный инструмент для скриншотов.
  • grim и slurp (Wayland) — утилиты для выделения области экрана и снимков экрана.
    • slurp позволяет выделить область экрана и печатает в стандартный вывод координаты.
    • grim принимает на вход координаты и делает снимок экрана.

Темы графических приложений

GTK

Один из плюсов GTK — широкие возможности для настройки внешнего вида. Существует большое разнообразие тем, хорошим ресурсом для поиска которых является Pling, а именно — раздел GNOME-Look.

Ниже приведены некоторые темы для GTK-приложений:

Чтобы использовать тему, выполните команды

gsettings set org.gnome.desktop.interface gtk-theme <название-темы>
gsettings set org.gnome.desktop.wm.preferences theme <название-темы>

Также можно выбрать светлую или тёмную тему. Это зачастую не повлияет на тему непосредственно, но сообщит приложениям (например, браузеру), что пользователь выбрал ту или иную тему.

# Для тёмной темы.
gsettings set org.gnome.desktop.interface color-scheme prefer-dark

# Для светлой темы
gsettings set org.gnome.desktop.interface color-scheme prefer-light

Наконец, существует утилита gnome-tweaks, которая позволяет настраивать тему GTK-приложений. Изначально она предназначена для GNOME, но работает и вне этого оконного окружения.

Qt

С кастомизацией Qt-приложений дела обстоят сложнее. Тем гораздо меньше, а изменить их достаточно сложно. Тем не менее, в этом разделе приведены советы по настройке внешнего вида приложений, использующих Qt.

Начиная с 5-ой версии Qt, существует возможность стилизовать приложения на Qt в соответствии с темой GTK. Это работает не всегда, но помогает. Для этого установите переменную окружения глобально (например, в конфигурационном файле вашего оконного менеджера):

QT_QPA_PLATFORMTHEME=gtk3

Ещё один способ обеспечить схожий внешний вид для приложений на GTK и Qt — использование тем, доступных для обоих систем, например, Breeze и Adwaita.

При использовании Wayland-композиторов Qt-приложения, как правило, выглядят лучше, чем на Xorg при использовании оконных менеджеров. Полноценные окружения рабочего стола, как правило, лишены данной проблемы — они поставляют приложения с соответствующими виджетами (например, GTK-приложения у GNOME, Qt-приложения у KDE Plasma), а для прочих приложений используют свои темы.

Иконки

Вы можете поменять иконки по умолчанию, установив желаемый набор. Найти и скачать наборы можно как вручную (например, отсюда), так и из репозиториев вашего дистрибутива.

Чтобы использовать набор, выполните команду ниже. Это работает только с GTK-приложениями.

gsettings set org.gnome.desktop.interface icon-theme <название-набора>

Курсоры

Как и в случае с иконками, вы можете поменять курсоры по умолчанию.

Установка из репозиториев:

Ручная установка:

При ручной установке, я рекомендую устанавливать темы для курсоров, заменяя тему по умолчанию. Это позволяет достичь одинакового отображения в GTK и Qt, кроме того, использование этого метода также установит курсоры для таких компонентов, как менеджеры дисплеев (экран входа в систему). Для этого распакуйте архив с курсорами в директорию /usr/share/icons/default. Должна получиться подобная структура:

/usr/share/icons/default/
    cursors/
        ...
    cursor.theme
    index.theme

Ресурсы

Список ресурсов для вдохновления:

Разные конфигурации, которые можно взять за основу:

Настройка Linux для разработки

Если вы используете другой дистрибутив (который не базируется на Arch Linux), используйте соответствующий пакетный менеджер. Для каждого пакета приведён статус пакетизации, где можно узнать название необходимого пакета в репозиториях вашего дистрибутива.

Go

go (компилятор, тулчейн, …)

Проще всего установить Go из репозиториев. Это позволит легко обновлять его с выходом новых версий.

Установите пакет go:

sudo pacman -S go
Статус пакетизации Статус пакетизации

Также можно скачать архив с go.dev и распаковать его в /usr/local.

# Замените X.X.X.OS-arch на нужную версию, ОС и архитектуру
# (например 1.23.4.linux-amd64).
curl -o go.tar.gz "https://go.dev/dl/goX.X.X.OS-arch.tar.gz"

# Полностью удалить предыдущую установку Go.
sudo rm -rf /usr/local/go

# Установить скачанную версию из архива.
sudo tar -C /usr/local -xzf go.tar.gz

При установке из архива рекомендуется создать символьную ссылку в /usr/local/bin, чтобы можно было запускать компилятор командой go:

sudo ln -s /usr/local/go/bin/go /usr/local/bin/go

Также можно добавить /usr/local/go/bin в $PATH.

gopls (LSP сервер)

Установите пакет gopls:

sudo pacman -S gopls
Статус пакетизации Статус пакетизации

Или установите при помощи go install:

# Замените `X.X.X` на нужную версию (например 0.17.1).
go install golang.org/x/tools/gopls@vX.X.X

Пример конфигурации для Neovim:

vim.lsp.config("gopls", {
    cmd = { "gopls", "serve" },
    filetypes = { "go", "gomod", "gowork", "gotmpl" },
    settings = {
        gopls = {
            analyses = {
                unusedparams = true,
            },
            staticcheck = true,
        },
    },
})

staticcheck (линтер)

Установите пакет staticcheck:

sudo pacman -S staticcheck
Статус пакетизации Статус пакетизации

Или с помощью go install:

go install honnef.co/go/tools/cmd/staticcheck@2026.1

Note

Начиная с версии Go 1.24, можно добавлять пакеты в качестве утилит.

go get -tool honnef.co/go/tools/cmd/staticcheck@2026.1

# Использование
go tool staticcheck --help

golangci-lint (линтер)

Установите пакет golangci-lint:

sudo pacman -S golangci-lint
Статус пакетизации Статус пакетизации

Или установите при помощи go install:

# Замените `X.X.X` на нужную версию (например 1.63.4).
go install github.com/golangci/golangci-lint/cmd/golangci-lint@vX.X.X

Note

Начиная с версии Go 1.24, можно добавлять пакеты в качестве утилит.

go get -tool github.com/golangci/golangci-lint/cmd/golangci-lint@vX.X.X

# Использование
go tool golangci-lint --help

Python

python3 (интерпретатор)

Установите пакет python. Скорее всего он уже установлен.

sudo pacman -S python
Статус пакетизации Статус пакетизации

uv (пакетный менеджер, менеджер проектов)

Установите пакет uv:

sudo pacman -S uv
Статус пакетизации Статус пакетизации

Также можно воспользоваться установочным скриптом, если нужный пакет отсутствует в репозиториях вашего дистрибутива:

curl -LsSf https://astral.sh/uv/install.sh | sh

ruff (форматтер, линтер)

Установите пакет ruff:

sudo pacman -S ruff
Статус пакетизации Статус пакетизации

Или с помощью установочного скрипта:

curl -LsSf https://astral.sh/ruff/install.sh | sh

Note

Системная установка ruff не обязательна при использовании виртуальных окружений. В частности, при использовании uv можно добавить ruff как утилиту в проект:

uv add --dev ruff

# Использование
uv run ruff format

pyright (LSP сервер)

Установите пакет pyright:

sudo pacman -S pyright
Статус пакетизации Статус пакетизации

pipx (пакетный менеджер)

pipx — обертка над pip, позволяющая устанавливать пакеты Python из Python Package Index в изолированных окружениях. Это полезно для установки исполняемых программ на Python, которых нет в репозиториях дистрибутива. В отличие от pip, пакеты устанавливаются в домашнюю директорию.

Установите пакет python-pipx:

sudo pacman -S python-pipx
Статус пакетизации Статус пакетизации

Note

Установка непосредственно пакетного менеджера pip не является обязательной при использовании виртуальных окружений:

python -m venv venv
source venv/bin/activate

which pip    # /путь/до/проекта/venv/bin/pip

Более того, система не даст установить пакет с помощью системного pip.

Rust

rustup (установщик)

Рекомендованный способ установки Rust — при помощи rustup.

Установите пакет rustup:

sudo pacman -S rustup
Статус пакетизации Статус пакетизации

Или установите при помощи скрипта:

curl -fsSL https://sh.rustup.rs | sh

После установки необходимо задать инструменты (toolchain) по умолчанию:

rustup default stable

rust-analyzer (LSP сервер)

Если после установки тулчейнов rust-analyzer не работает, можно установить его вручную:

# Способ из документации
rustup component add rust-src

# Ещё один способ
rustup component add rust-analyzer

Также можно установить пакет rust-analyzer:

sudo pacman -S rust-analyzer
Статус пакетизации Статус пакетизации

clippy (линтер)

rustup component add clippy

Игры на Linux

Гайд по настройке Linux для игр.

Особенности:

  • Для запуска исполняемых файлов Windows (.exe) используется wine
  • В качестве лаунчера используется Lutris
  • Для систем с Wayland используются xwayland-satellite, Cage и gamescope

1. Включение репозитория multilib

Репозиторий multilib содержит 32-битное программное обеспечение и библиотеки, которые можно использовать для запуска и сборки 32-битных приложений на 64-битных установках.

В /etc/pacman.conf добавить или раскомментировать строки:

[multilib]
Include = /etc/pacman.d/mirrorlist

Далее необходимо синхронизировать репозиторий:

sudo pacman -Syu

2. Установка пакетов

Набор пакетов может показаться избыточным, но он обеспечивает корректную работу на разных системах. Кроме того, некоторые пакеты могут быть уже установлены.

sudo pacman -S --needed lutris wine wine-gecko wine-mono winetricks giflib lib32-giflib libpng lib32-libpng libldap lib32-libldap gnutls lib32-gnutls openal lib32-openal v4l-utils lib32-v4l-utils libx11 lib32-libx11 ncurses lib32-ncurses libgcrypt lib32-libgcrypt libxcomposite lib32-libxcomposite dqlite lib32-sqlite libxinerama lib32-libxinerama gdk-pixbuf2 lib32-gdk-pixbuf2 gcc-libs lib32-gcc-libs ocl-icd lib32-ocl-icd libxslt lib32-libxslt libva lib32-libva gst-plugins-base libgpg-error lib32-libgpg-error libjpeg-turbo lib32-libjpeg-turbo libglvnd lib32-libglvnd libva-mesa-driver lib32-libva-mesa-driver vkd3d lib32-vkd3d lib32-vulkan-icd-loader vulkan-icd-loader glad psmisc fluidsynth libunwind vulkan-tools vulkan-headers

Для систем с PipeWire понадобятся пакеты lib32-libpipewire и lib32-pipewire — для воспроизведения аудио 32-битных приложений:

sudo pacman -S lib32-libpipewire lib32-pipewire

Warning

Звук в некоторых играх может не работать даже с этими библиотеками. Проблему может решить установка пакета lib32-libpulse:

sudo pacman -S lib32-libpulse

Если используется видеокарта от AMD:

sudo pacman -S amdvlk vulkan-radeon lib32-amdvlk lib32-vulkan-radeon

Если в игре некорректное отображение, можно попробовать установить плагины для GStreamer:

sudo pacman -S gst-plugins-bad gst-plugins-good gst-plugins-ugly

В некоторых играх могут некорректно отображаться шрифты. Исправить проблему помогает установка шрифтов в winetricks:

winetricks corefonts

3. Для систем с Wayland

При запуске игр с помощью wine используется XWayland, поэтому в некоторых Wayland-композиторах потребуется использовать дополнительное ПО:

В этом гайде рассмотрены xwayland-satellite, Cage и gamescope. В целом, можно выбрать любой из вариантов. Лучше всего попробовать несколько вариантов для нужных игр и выбрать наиболее подходящий.

По моему опыту, xwayland-satellite хватает для многих игр, но он требует настройки на уровне хостового композитора. Cage очень прост в использовании, но работает не идеально (например, если у игры нестандартное разрешение). gamescope позволяет гибко настроить множество параметров.

xwayland-satellite

  1. Установите пакет :

    sudo pacman -S xwayland-satellite
    
  2. Включите сервис xwayland-satellite:

    systemctl --user enable --now xwayland-satellite
    

    Если вы используете niri, пропустите этот шаг. Начиная с версии 25.08 в niri есть встроенная интеграция xwayland-satellite.

  3. В настройках Lutris (Preferences > Global Options > Game execution > Environment variables) переменную окружения DISPLAY и установите значение :0 — таким образом wine будет всегда использовать Xwayland для отображения.

    Установка переменной окружения DISPLAY в Lutris

После настройки любая игра, запускаемая с помощью wine, будет открываться с помощью xwayland-satellite в отдельном окне.

Cage

  1. Установите пакет cage:

    sudo pacman -S cage
    
  2. Если игра ещё не добавлена, нажмите “+” в верхнем левом углу, выберите “Add locally installed game”: Установка игры При настройке уже установленной игры этот шаг можно пропустить.

  3. В настройках игры, разделе Game Info установить поле Runner в значение “Linux (Runs native games)” Установка значения

  4. В разделе Game Options прописать параметры аналогичным образом, заменив путь до каталога с игрой и название исполняемого файла Параметры Game Options В этом примере используется директория /home/ivan/Games/HoloCure:

    Games/
        HoloCure/
            ...
            HoloCure.exe
    
  5. В качестве альтернативы можно создать вспомогательный скрипт и указать его как исполняемый файл:

    Games/
        HoloCure/
            ...
            HoloCure.exe
            launch.sh
    

    Пример скрипта:

    #!/bin/sh
    
    cage -- wine HoloCure.exe
    

    Вспомогательный скрипт как исполняемый файл

    Important

    Важно, чтобы у файла были права на исполнение:

    chmod +x /путь/до/скрипта/launch.sh
    

gamescope

gamescope позволяет указать больше опций для композитора. Например, можно указать разрешение. Это может быть полезно для игр с нестандартным размером окна.

  1. Установите пакет :

    sudo pacman -S gamescope
    
  2. Если игра ещё не добавлена, нажмите “+” в верхнем левом углу, выберите “Add locally installed game”: Установка игры При настройке уже установленной игры этот шаг можно пропустить.

  3. В настройках игры, разделе Game Info установить поле Runner в значение “Linux (Runs native games)”. Установка значения

  4. В разделе Game Options прописать параметры аналогичным образом, заменив путь до каталога с игрой и название исполняемого файла Параметры Game Options

    В этом примере используется директория /home/ivan/Games/Touhou 10 - Mountain of Faith:

    Games/
        Touhou 10 - Mountain of Faith/
            ...
            th10.exe
    
  5. В качестве альтернативы можно создать вспомогательный скрипт и указать его как исполняемый файл:

    Games/
        Touhou 10 - Mountain of Faith/
            ...
            launch.sh
            th10.exe
    

    Пример скрипта:

    #!/bin/sh
    
    WINEPREFIX="$XDG_DATA_HOME/wineprefixes/default"
    LC_ALL="ja_JP.UTF-8"
    
    gamescope -W 640 -H 480 -r 60 -f -- wine th10.exe
    

    Вспомогательный скрипт как исполняемый файл

    Important

    Важно, чтобы у файла были права на исполнение:

    chmod +x /путь/до/скрипта/launch.sh
    

Перенос библиотеки игр из другой системы

Чтобы перенести библиотеку Lutris на новую систему, достаточно скопировать следующие директории:

  • ~/.cache/lutris
  • ~/.config/lutris
  • ~/.local/share/lutris

Если использовалась системная версия wine, также потребуется скопировать директорию $WINEPREFIX (по умолчанию ~/.wine). Это нужно, чтобы перенести сохранения игр, так как в этот каталог сохраняются данные приложений, запускаемых через wine.

Caution

Абсолютные пути файлов из библиотеки игр должны совпадать.

  • Если игры хранились на отдельном разделе, в новой системе раздел с играми должен быть примонтирован по тому же пути, что и в предыдущей системе.

  • Если игры хранились в home/ (как правило, ~/Games), то путь к директории должен быть таким же, как и в предыдущей системе.

PipeWire

PipeWire — современный мультимедийный фреймворк.

Установка

Для работы PipeWire необходимо установить пакеты:

  • pipewire — Маршрутизатор и процессор аудио/видео с низкой задержкой
  • pipewire-alsa — Замена ALSA для работы с PipeWire
  • pipewire-pulse — Замена PulseAudio для работы с PipeWire
  • wireplumber — Реализация менеджера сеансов/политик для PipeWire

Я рекомендую дополнительно установить:

  • wiremix — TUI-клиент для управления звуком
  • sof-firmware — Микрокод “Sound Open Firmware” (например, для поддержки встроенных динамиков)

В качестве графической альтернативы wiremix можно использовать pavucontrol — GUI-клиент для управления звуком (изначально создавался для PulseAudio, но работает с PipeWire).

# Минимальная установка
sudo pacman -S pipewire pipewire-alsa pipewire-pulse wireplumber

# Дополнительно
sudo pacman -S sof-firmware wiremix # pavucontrol

Управление звуком

Команды, приведённые ниже, могут быть полезны для управления звуком из скриптов, в сочетаниях клавиш и проч.

# Увеличить громкость (замените 0.05 на нужное значение).
wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05+

# Уменьшить громкость.
wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05-

# Переключить звук (mute/unmute).
wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle

Пример комбинаций клавиш для niri:

binds {
    XF86AudioRaiseVolume allow-when-locked=true {
        spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.05+"
    }

    XF86AudioLowerVolume allow-when-locked=true {
        spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.05-"
    }

    XF86AudioMute allow-when-locked=true {
        spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"
    }
}

Устранение неполадок

Устройство, подключённое по Bluetooth, не отображается среди устройств вывода PulseAudio

Если устройство подключено по Bluetooth, но не отображается как выходное устройство (например, в pavucontrol), следующие шаги могут решить проблему.

  1. Убедиться в том, что устройство подключено (замените XX:XX:XX:XX:XX:XX на фактический MAC-адрес):

    bluetoothctl connect XX:XX:XX:XX:XX:XX
    

    Вывод должен заканчиваться строкой наподобие Connection successful.

  2. Проверить, что устройство не отображается среди устройств вывода:

    pactl list short sinks | grep bluez
    
  3. Добавьте следующую политику в файл /etc/bluetooth/main.conf:

    [General]
    Enable=Control,Gateway,Headset,Media,Sink,Socket,Source
    

Принтеры и сканеры

Настройка Linux для работы с принтерами и сканерами.

Принтеры (CUPS)

CUPS (Common Unix Printing System) — это открытая система для печати в Linux.

Установка

Пакет cups доступен в большинстве репозиториев.

Статус пакетизации Статус пакетизации
sudo pacman -S cups
sudo systemctl enable cups
sudo systemctl start cups

Для работы CUPS требуется установить GhostScript:

sudo pacman -S ghostscript

Для добавления принтера, в зависимости от модели, необходимо установить соответствующий драйвер. Более подробную информацию см. в

Добавление принтеров

  1. Открыть http://localhost:631
  2. Перейти на вкладку “Administration”. Потребуется ввести пароль
  3. Выбрать нужную опцию (“Local Printers”, “Discovered Network Printers”, “Other Network Printers”)
  4. Следовать инструкции

Проверка принтера

Чтобы проверить, что принтер подключён корректно, проделайте следующие шаги:

  1. Перейти на вкладку “Printers”
  2. Выбрать принтер, который необходимо проверить
  3. В выпадающем меню “Maintenance” выбрать опцию “Print test page” Тестовая страница

Если принтер подключён корректно, на нём будет напечатана тестовая страница.

Сканеры (SANE)

SANE (Scanner Access Now Easy) — API, обеспечивающий стандартизированный доступ к любому оборудованию для сканирования растровых изображений.

Установка

Пакет sane доступен в большинстве репозиториев. При этом графические приложения (фронтенды), как правило, требуют пакет в качестве зависимости, так что его явная установка часто не является обязательной.

Статус пакетизации Статус пакетизации
sudo pacman -S sane

Фронтенды

Для SANE существует множество фронтендов. Наиболее популярные приведены ниже:

  1. Simple Scan — Упрощенный графический интерфейс, который должен быть проще в использовании и лучше интегрирован в рабочий стол GNOME, чем XSane. Является частью GNOME.

    sudo pacman -S simple-scan
    
  2. Skanlite — Простое приложение для сканирования изображений, которое не делает ничего, кроме сканирования и сохранения изображений, основанное на бэкенде KSane. Часть KDE.

    sudo pacman -S scanlite
    
  3. Skanpage — Приложение для сканирования и сохранения документов и изображений, состоящих из одной или нескольких страниц.

    sudo pacman -S scanpage
    
  4. Scantailor — Приложение для сканирования, которое работает с проектами и позволяет редактировать их в процессе сканирования.

    sudo pacman -S scantailor-advanced
    

Восстановление GRUB

Если при использовании GRUB не получилось загрузить систему, возможны несколько сценариев. Определить эти сценарии можно по виду командной строки (промпта):

  1. grub>
    

    Этот промпт указывает на то, что GRUB определил всё, кроме файла конфигурации (/boot/grub/grub.cfg). См. grub>.

  2. grub rescue>
    

    Этот промпт указывает на то, что GRUB не смог определить свою директорию или файлы в ней повреждены/отсутствуют (например, отсутствует ядро Linux). См. grub rescue>.

grub>

  1. Выведите список разделов

    ls
    

    Будет отображён список всех блочных устройств, которые GRUB смог определить.

  2. Определите корневой раздел

    Для этого необходимо выполнить команду ниже для каждого раздела из шага 1 (замените _ на номер в вашем случае):

    ls (hd_)/    # "/" в конце является обязательным!
    

    Если вывод будет содержать директории boot, usr и т.д. — это корневой раздел.

    Наконец, нужно отметить этот раздел как корневой для GRUB (замените _ на номер в вашем случае):

    set root=(hd_)
    
  3. Задайте ядро Linux, которое будет использоваться для загрузки

    linux /boot/vmlinuz-linux root=/dev/sda1
    

    Ядро и корневой раздел нужно выбрать в зависимости от системы. В качестве root нужно установить корневой раздел.

    Пример для NVME:

    linux /boot/vmlinuz-linux root=/dev/nvme0n1p3
    
  4. Загрузите initramfs

    initrd /boot/initramfs-linux.img
    

    Обратите внимаение, что название файла, как правило, имеет вид initramfs-<linux>.img, где <linux> зависит от того, какое ядро используется в шаге 3.

    Например, если используется /boot/vmlinuz-linux-zen, нужно выполнить команду:

    initrd /boot/initramfs-linux-zen.img
    
  5. Загрузить систему

    boot
    

    Для этого также можно нажать сочетание клавиш CtrlX или F10.

  6. Переустановить GRUB

    Для систем с BIOS (как правило, более старые устройства). Замените X на букву, которая используется в вашем случае:

    grub-mkconfig -o /boot/grub/grub.cfg
    grub-install --target=i386-pc /dev/sdX
    

    Например:

    grub-mkconfig -o /boot/grub/grub.cfg
    grub-install --target=i386-pc /dev/sda
    

    Для систем с UEFI (как правила, более новые устройства):

    grub-mkconfig -o /boot/grub/grub.cfg
    grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
    

    После названия блочного устройства не должно идти номера раздела (/dev/sda, но не /dev/sda1)! grub-install применяется не к разделу, а ко всему блочному устройству.

  7. Перезагрузите систему

    reboot
    

grub rescue>

В этом случае будем использовать загрузочную флешку (livecd) (хотя в редких случаях можно восстановить систему и без неё). В инструкции будет использоваться загрузочный образ Arch Linux (archiso), можно также использовать загрузочные образы других дистрибутивов.

  1. Загрузитесь с USB

    Для этого нужно переопределить приоритет загрузки (Boot Priority) в BIOS/UEFI. Этот шаг сильно зависит от устройства, так что дать конкретные инструкции невозможно. Обычно клавиши F* (F2, F10) прерывают обычную загрузку и позволяют зайти в BIOS/UEFI.

  2. Примонтируйте необходимые разделы

    Зависит от схемы разметки диска. Например:

    mount /dev/sda1 /boot/efi
    mount /dev/sda2 /
    

    NVME:

    mount /dev/nvme0n1p1 /mnt/boot/efi
    mount /dev/nvme0n1p3 /mnt
    
  3. chroot

    arch-chroot /mnt
    
  4. Переустановите GRUB

    Для систем с BIOS (как правило, более старые устройства). Замените X на букву, которая используется в вашем случае:

    grub-mkconfig -o /boot/grub/grub.cfg
    grub-install --target=i386-pc /dev/sdX
    

    Например:

    grub-mkconfig -o /boot/grub/grub.cfg
    grub-install --target=i386-pc /dev/sda
    

    Для систем с UEFI (как правила, более новые устройства):

    grub-mkconfig -o /boot/grub/grub.cfg
    grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
    

    После названия блочного устройства не должно идти номера раздела (/dev/sda, но не /dev/sda1)! grub-install применяется не к разделу, а ко всему блочному устройству.

  5. Перезагрузите систему

    exit    # Или Ctrl+D, выход из arch-chroot
    reboot
    

Виртуальные машины на базе libvirt и QEMU

Установка

Требуется установить пакет libvirt и один из гипервизоров. Я выбрал QEMU (пакет qemu-full). Для установки виртуальных машин требуется пакет virt-install.

sudo pacman -S libvirt virt-install qemu-full
Статус пакетизации (libvirt) Статус пакетизации
Статус пакетизации (QEMU) Статус пакетизации

Если виртуальные машины будут запускаться с графической сессией, можно использовать virt-viewer:

sudo pacman -S virt-viewer
Статус пакетизации Статус пакетизации

Включите и запустите службу libvirtd

sudo systemctl enable libvirtd
sudo systemctl start libvirtd

Чтобы предоставить пользователю доступ к демону libvirt, проще всего добавить его в группу libvirt:

sudo usermod -aG libvirt $(whoami)

Создание ВМ

Скачайте ISO-образ операционной системы, которая будет использоваться в ВМ. Ниже перечислены ссылки для некоторых ОС:

Для установки ВМ выполните команду ниже, указав необходимые параметры:

virt-install \
    --name <имя-ВМ> \
    --memory <размер оперативной памяти в МБ> \
    --vcpus <количество виртуальных ядер> \
    --cpu host \
    --cdrom <путь до ISO-образа> \
    --disk size=<размер диска в ГБ>,format=qcow2 \
    --network user \
    --virt-type kvm \
    --graphics vnc

Далее необходимо установить операционную систему виртуальной машины в открывшемся окне. Если окно не открылось, можно использовать virt-viewer напрямую (здесь и далее <имя-ВМ> совпадает с именем, указанным при установке):

virt-viewer <имя-ВМ>

Использование ВМ

Запуск

virsh start <имя-ВМ>
virt-viewer <имя-ВМ>

Снапшоты

Создать снапшот:

virsh snapshot-create-as <имя-ВМ> <название-снапшота> --description <описание>

Посмотреть список снапшотов:

virsh snapshot-list <имя-ВМ>

Откатить ВМ до снапшота:

# Откатиться до снапшота по названию
virsh snapshot-revert <имя-ВМ> <название-снапшота>

# Откатиться до текущего снапшота
virsh snapshot-revert <имя-ВМ> --current

Удалить снапшот:

# Удалить снапшот по названию
virsh snapshot-delete <название-снапшота>

# Удалить текущий снапшот
virsh snapshot-delete --current

Проигрывание аудио

Добавьте (или раскомментируйте) следующую опцию в файле /etc/libvirt/qemu.conf:

vnc_allow_host_audio = 1

В качестве альтернативы можно использовать SPICE.

virtiofs

Необходимо отредактировать конфигурацию ВМ. Чтобы открыть конфигурацию для редактирования, выполните команду:

virsh edit <имя-ВМ>

Добавить параметры в соответствующих секциях конфигурации:

  <domain type='kvm'>
      [...]

+     <memoryBacking>
+       <source type='memfd'/>
+       <access mode='shared'/>
+     </memoryBacking>

      [...]

      <devices>
          [...]

+         <filesystem type='mount' accessmode='passthrough'>
+             <driver type='virtiofs'/>
+             <source dir='<путь на хосте>'/>
+             <target dir='host'/>
+         </filesystem>

          [...]
      </devices>

      [...]
  </devices>

Замените <путь на хосте> на путь до директории, которая будет доступна из виртуальной машины.

Внутри ВМ примонтируйте директорию командой:

mount -t virtiofs host /mnt

См. также: Sharing files between the host and its virtual machines by using virtiofs.

Подключение по SSH. Port forwarding.

Самый простой способ настройки port forwarding — выполнить команду ниже, когда ВМ запущена:

virsh qemu-monitor-command --hmp <имя-ВМ> 'hostfwd_add ::<порт на хосте>-:<порт на ВМ>'

Замените выделенные параметры на необходимые значения, например:

virsh qemu-monitor-command --hmp my-vm 'hostfwd_add ::2222-:22'

В примере выше 22 порт виртуальной машины “my-vm” будет доступен как 2222 порт на хосте.

Эту команду необходимо выполнять после каждой остановки/запуска ВМ. Можно автоматизировать этот процесс при помощи хуков libvirt.

Убедитесь, что на виртуальной машине настроен и запущен sshd. Подключитесь к ВМ командой:

ssh <пользователь на ВМ>@127.0.0.1 -p <порт на хосте>

Для передачи файлов между ВМ и хостом можно использовать scp или настроить SSHFS.

Удаление

virsh destroy <имя-ВМ>
virsh undefine <имя-ВМ> --remove-all-storage

Если для указанной ВМ создавались снапшоты, перед удалением ВМ их также необходимо удалить.

Настройка ВМ с Windows 10

SSH

Включите возможность “OpenSSH Server”.

В настройках перейдите в Settings > Apps > Apps & features > Optional features, нажмите “Add a feature” и установите “OpenSSH Server”.

Установка возможности libvirt

В качестве альтернативы, выполните команду:

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Возможно, после включения возможности потребуется перезагрузка.

Включите и запустите службу sshd:

Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'

Обычно, система автоматически создаст правило для фаерволла, позволяющее подключаться по ssh, используя порт 22. Если правило не было создано (т.е. подключение не удаётся) или требуется использовать другой порт, добавьте его командой:

New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 -Program "C:\Windows\System32\OpenSSH\sshd.exe"

По умолчанию, подключение по ssh будет запускать cmd.exe. Чтобы поменять оболочку на PowerShell, выполните команду от имени администратора:

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

Скопируйте свой публичный SSH ключ в C:\Users\<имя пользователя>\.ssh\authorized_keys.

Настройте port forwarding для ВМ и подключитесь к ней командой:

ssh <пользователь на ВМ>@127.0.0.1 -p 2222

См. также: Key-based authentication in OpenSSH for Windows.

Конвертация OVA в qcow2

OVA — формат для хранения и распространения ВМ, используемый VirtualBox, VMWare и другими системами виртуализации. Представляет собой tar-архив, содержащий образ диска и другие файлы.

Распакуйте архив:

tar -xvf vm.ova

В рабочей директории должен появиться образ диска, как правило, в формате VMDK. Конвертируйте образ в qcow2:

qemu-img convert -pf vmdk vm-disk001.vmdk -O qcow2 vm.qcow2

После конвертации импортируйте ВМ с помощью virt-install:

virt-install \
    --import \
    --name <имя-ВМ> \
    --memory <размер оперативной памяти в МБ> \
    --vcpus <количество виртуальных ядер> \
    --cpu host \
    --disk path=<путь до файла qcow2>,format=qcow2 \
    --network user \
    --virt-type kvm \
    --graphics vnc

FFmpeg

FFmpeg — кроссплатформенное решение для записи, обработки и стриминга видео- и аудиофайлов.

На этой странице представлены примеры использования FFmpeg для пременения тех или иных эффектов. Как и в случае с другими страницами в этом разделе, это лишь базовые, распространенные сценарии использования. На самом деле FFmpeg является настолько мощным инструментарием, что его используют примерно все стриминговые сервисы.

Установка

Установите пакет ffmpeg:

sudo pacman -S ffmpeg
Статус пакетизации Статус пакетизации

Затухание/проявление (fade)

Для всех команд ниже:

  • Начало — время начала затухания (в секундах от начала)
  • Продолжительность — продолжительность эффекта (в секундах)

Аудио / затухание:

ffmpeg -i in.mp3 -af afade=t=out:st=<начало>:d=<продолжительность> out.mp3

Аудио / проявление:

ffmpeg -i in.mp3 -af afade=t=in:st=0:d=<продолжительность> out.mp3

Видео / затухание:

ffmpeg -i in.mp4 -vf fade=t=out:st=<начало>:d=<продолжительность> out.mp4

Видео / проявление:

ffmpeg -i in.mp4 -vf fade=t=in:st=0:d=<продолжительность> out.mp4

Фильтры можно комбинировать. В этом случае опции разделяются запятыми:

ffmpeg -i in.mp4 -vf "fade=t=in:st=0:d=10,fade=t=out:st=10:d=5" -c:a copy out.mp4

Сжатие

Уменьшить размер видео можно командой:

ffmpeg -i in.mp4 -vcodec libx265 -crf 28 out.mp4

Если необходима совместимость с macOS (QuickTime), нужно использовать кодек H.265/HEVC:

ffmpeg -i in.mp4 -c:v libx265 -preset fast -crf 28 -tag:v hvc1 -c:a eac3 -b:a 224k out.mp4

Создание видео-стикеров (Telegram)

Telegram позволяет создавать видео-стикеры. Файл видео-стикера должен удовлетворять следующим условиям:

  • Формат .webm
  • До 30 кадров в секунду
  • Кодек VP9
  • Отсутствие аудиопотока
  • Одна сторона должна быть размером 512 пикселей, другая сторона меньше или равна 512 пикселей
  • Продолжительность не должна превышать 3 секунд
  • Размер видео после кодирования не должен превышать 256 КБ

Создать файл видео-стикера можно командой:

ffmpeg -y -i in.mov -r 30 -t 2.99 -an -c:v libvpx-vp9 \
    -pix_fmt yuva420p \
    -vf 'scale=512:512:force_original_aspect_ratio=decrease' \
    -b:v 400K \
    out.webm

При этом формат входного файла (in.mov в примере) может быть практически любым — ffmpeg поддерживает огромное количество форматов видео и изображений. В частности, можно сделать статический видео-стикер из изображения.

Если размер выходного файла больше 256 КБ, попробуйте уменьшить значение параметра -b:v 400K, например, до -b:v 300K.

Удалить метаданные

С помощью флага -map_metadata -1:

ffmpeg -i in.mp3 -c:v copy -c:a copy -map_metadata -1 out.mp3

ImageMagick

ImageMagick — кроссплатформенная утилита для обработки изображений.

ImageMagick предоставляет очень большое количество инструментов для работы с изображениями. Здесь показаны лишь часто используемые примеры.

Установка

Установите пакет imagemagick:

sudo pacman -S imagemagick
Статус пакетизации Статус пакетизации

В зависимости от версий может вызываться либо как magick (начиная с 7), либо convert (в более старых), что является deprecated формой запуска. Далее в примерах команд используется magick.

Также во всех командах ниже in.png — входной файл, out.png — выходной файл. В общем случае ImageMagick поддерживает довольно много форматов.

Размытие

-blur <радиус>x<сигма>:

magick in.png -blur 0x8 out.png
ДоПосле
До обработкиРазмытие

Радиус в большинстве случаев равен 0. Сигма может зависить от размера изображения (для бóльших изображений имеет смысл брать бóльшие значения).

Затемнение

-fill black -colorize <процент>%:

magick in.png -fill black -colorize 60% out.png
ДоПосле
До обработкиЗатемнение

black можно заменить на другие цвета. Чаще всего возникает задача сделать изображение более светлым (-fill white) или более темным (-fill black).

Удаление метаданных

-strip:

magick in.png -strip out.png

Также удалить метаданные можно с помощью exiftool, который поддерживает большее число форматов файлов. Флаг -strip удобно добавлять “заодно” к другим флагам (обработка + удаление метаданных).

Генерация UML диаграмм (C++)

Генерация UML диаграмм при помощи clang-uml и PlantUML. Осуществляется в 3 этапа:

  1. Генерации базы данных компиляции compile_commands.json
  2. Генерация UML-диаграммы в формате разметки PlantUML
  3. Конвертация разметки PlantUML в выбранный формат

compile_commands.json

Генерация compile_commands.json зависит от системы сборки. Ниже перечислены способы для некоторых распространённых систем сборки:

CMake

Начиная с версии 2.8.5, CMake поддерживает опцию CMAKE_EXPORT_COMPILE_COMMANDS:

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .

Команда выше создаст файл compile_commands.json в директории сборки.

Meson

Файл автоматически создаётся в директории сборки.

Ninja

Начиная с версии 1.2, можно передать аргументы командной строки -t compdb:

ninja -t compdb > compile_commands.json

Прочие системы сборки

Некоторые системы сборки (напр. GNU Autotools) не поддерживают генерацию compile_commands.json. В этом случае базу данных компиляции можно сгенерировать при помощи внешних инструментов.

Установите пакет bear:

sudo pacman -S bear
Статус пакетизации Статус пакетизации

Предположим, проект использует make, команда для сборки:

make -j4

Тогда для генерации compile_commands.json при помощи bear нужно вызвать утилиту следующим образом:

bear -- make -j4

Генерация диаграммы в формате PlantUML

Для генерации PlantUML-диаграммы используется утилита clang-uml.

Установите пакет clang-uml (AUR):

paru -S clang-uml
# или
yay -S clang-uml
Статус пакетизации Статус пакетизации

Необходимо создать конфигурационный файл .clang-uml в той директории, из которой утилита будет запускаться. Базовая конфигурация может выглядеть следующим образом:

compilation_database_dir: <build-dir>
output_directory: diagrams

diagrams:
    config_class:
        type: class

<build-dir> необходимо заменить на путь до директории, в которой находится файл compile_commands.json.

Например, при использовании Meson:

project/
    builddir/    # Директория сборки Meson
        ...
        compile_commands.json
    .clang-uml
    main.cpp
    meson.build

в .clang-uml следует указать:

compilation_database_dir: builddir

Более подробную информацию о конфигурации см. в документации clang-uml.

Запустите clang-uml:

clang-uml

В соответствии с конфигурацией, в директории <output_directory> будет сгенерирован .pump-файл. Для типовой конфигурации выше будет сгенерирован файл diagrams/config_class.puml.

Конвертация PlantUML в изображение

Для конвертации .puml-файла можно использовать CLI-интерфейс PlantUML. Установите пакеты graphviz и plantuml:

sudo pacman -S graphviz plantuml
Статус пакетизации (graphviz) Статус пакетизации
Статус пакетизации (plantuml) Статус пакетизации

Запустите plantuml, указав путь до .puml-файла:

plantuml ./diagrams/config_class.puml

Диаграмма будет конвертирована в diagrams/config_class.png.

Выходной формат можно изменить при помощи флагов (-tpng, -tsvg, -tpdf). См. полный список форматов в документации PlantUML.

Пример

Ниже представлен простой пример проекта и генерации UML-диаграмм для него.

project/
    bar.cpp
    bar.hpp
    foo.cpp
    foo.hpp
    main.cpp
    Makefile
bar.cpp
#include "bar.hpp"

Bar::Bar(Foo *foo) {
    m_Foo = foo;
}

void Bar::printUnderlyingFooValue() {
    if (m_Foo != nullptr) {
        m_Foo->printValue();
    }
}
bar.hpp
#ifndef BAR_HPP
#define BAR_HPP

#include "foo.hpp"

class Bar {
    public:
        Bar(Foo *foo);
        void printUnderlyingFooValue();

    private:
        Foo *m_Foo;
};

#endif /* BAR_HPP */
foo.cpp
#include <iostream>

#include "foo.hpp"

Foo::Foo(int v) {
    m_Value = v;
}

void Foo::printValue() {
    std::cout << "Value is " << m_Value << std::endl;
}
foo.hpp
#ifndef FOO_HPP
#define FOO_HPP

class Foo {
    public:
        Foo(int v);
        void printValue();

    private:
        int m_Value;
};

#endif /* FOO_HPP */
main.cpp
#include "bar.hpp"
#include "foo.hpp"

int main() {
    Foo *foo = new Foo(42);
    Bar *bar = new Bar(foo);

    bar->printUnderlyingFooValue();

    return 0;
}
Makefile

При копировании файла замените пробелы перед командами на табуляцию.

build: bar.o foo.o main.o
    g++ -o my-binary bar.o foo.o main.o

bar.o: bar.cpp bar.hpp
    g++ -c bar.cpp

foo.o: foo.cpp foo.hpp
    g++ -c foo.cpp

main.o: main.cpp
    g++ -c main.cpp

clean:
    rm -rf my-binary *.o

Шаги для генерации UML-диаграммы:

  1. Сгенерировать compile_commands.json:

    bear -- make
    
  2. Создать конфигурационный файл .clang-uml:

    diagrams:
        config_class:
            type: class
    
  3. Сгенерировать диаграмму в формате PlantUML:

    clang-uml
    
  4. Конвертировать .puml-файл в изображение:

    plantuml -tsvg ./config_class.puml
    

На выходе получается подобная диаграмма:

Сгенерированная UML-диаграмма

Руководство по разметке в Pango

Краткое руководство по формату разметки, который используется в Pango. В частности, он используется в GTK.

Этот документ — перевод статьи из документации к одному из моих проектов. Здесь представлены практически все возможности разметки Pango, но не все. В частности, я опустил те, которые при работе над проектом воспроизвести не удалось (они в любом случае почти никогда не используются).

См. также Pango: Text Attributes and Markup.

В целом, разметка в чем-то похожа на HTML, но поддерживает лишь несколько тегов. Очевидно, Pango нацелен на рендеринг текста, поэтому нерелевантные теги в нем не поддерживаются.

<span> и его атрибуты

<span> — самый распространенный и общий тег, который можно кастомизировать с помощью ряда атрибутов. Атрибуты задают свойства для текста внутри тега.

Некоторые шрифты могут не поддерживать некоторые атрибуты. Эффект зависит непосредственно от шрифта.

Атрибуты, перечисленные через запятую в заголовках — это псевдонимы для одного и того же атрибута, можно использовать любой.

font, font_desc

Строка-описание шрифта, например Sans Italic 12. Прочие атрибуты тега <span> имеют приоритет над данным описанием. Например, если также указать style="normal", шрифт не будет курсивным (как можно было ожидать из описания шрифта).

<span font="Sans Italic 12">Lorem ipsum dolor sit amet</span>

font_family, face

Название семейства шрифта.

<span font_family="Roboto">The quick brown fox jumps over the lazy dog</span>

font_size, size

Размер шрифта в одном из следующих форматов:

  • 1024-ые доли пункта (например 20480 для 20 пунктов)
  • Пункты (12.5pt)
  • Проценты (200%)
  • Относительный размер:
    • smaller
    • larger
  • Абсолютный размер:
    • xx-small
    • xx-small
    • x-small
    • small
    • medium
    • large
    • x-large
    • xx-large

Для абсолютного размера, если также нужно указать шрифт, проще использовать font.

<span size="large">Какой-то текст и <span size="larger">текст побольше</span></span>

font_style, style

Стиль шрифта: bold, italic или oblique.

<span style="bold">Будьте собой</span>

font_weight, weight

Вес (толщина) шрифта, в одном из следующих форматов:

  • Число от 1 до 1000
  • Именованное абсолютное значение:
    • ultralight
    • light
    • normal
    • bold
    • ultrabold
    • heavy
<span weight="ultrabold">
    pls rember that wen u feel scare or frigten never forget ttimes wen u
    feeled happy wen day is dark alway rember happy day
</span>

font_variant, variant

Вариант шрифта.

Один из:

  • normal
  • small-caps
  • all-small-caps
  • petite-caps
  • all-petite-caps
  • unicase
  • title-caps
<span variant="small-caps">это выглядит странно</span>

font_stretch, stretch

Ширина символов.

Одно из:

  • ultracondensed
  • extracondensed
  • condensed
  • semicondensed
  • normal
  • semiexpanded
  • expanded
  • extraexpanded
  • ultraexpanded
<span stretch="ultracondensed">время писать документацию!</span>

font_features

Список типографических особенностей OpenType, элементы разделены запятыми.

<span font_features="dlig=1, -kern, afrc on">текст</span>

См. MDN: особенности шрифтов OpenType.

color, fgcolor, foreground

Цвет текста в одном из следующих форматов:

  • Цвет RGB в hex-нотации (#ff2400)
  • Цвет RGBA в hex-нотации (#7900ff7f)
  • Название цвета (green)

Указание цвета в формате RGBA эквивалентно заданию атрибутов color и alpha.

<span color="red">Красный текст</span>

alpha, fgalpha

Доля прозрачности цвета текста, в одном из следующих форматов:

  • Целое число от 1 до 65536 (12345)
  • Процент (40%)
<span alpha="30%">вау прозрачный текст</span>

bgcolor, background

Цвет фона в одном из следующих форматов:

  • Цвет RGB в hex-нотации (#ff2400)
  • Цвет RGBA в hex-нотации (#7900ff7f)
  • Название цвета (green)

Указание цвета в формате RGBA эквивалентно заданию атрибутов bgcolor и bgalpha.

<span bgcolor="green">...</span>

bgalpha, background_alpha

Доля прозрачности фона, в одном из следующих форматов:

  • Целое число от 1 до 65536 (54321)
  • Процент (55%)
<span alpha="30%">ого прозрачный фон</span>

underline

Подчеркивание текста.

Один из:

  • none
  • single
  • double
  • low
  • error
<span underline="error">Runtime Error: "libhappiness.so" not found</span>

underline_color

Цвет подчеркивания текста (underline), в одном из следующих форматов:

  • Цвет RGB в hex-нотации (#ff2400)
  • Название цвета (green)
<span underline="error" underline_color="red">ашибка</span>

overline

Надстрочная черта. Значение none или single.

<span overline="single">текст с надстрочной чертой</span>

overline_color

Цвет надстрочной черты (overline), в одном из следующих форматов:

  • Цвет RGB в hex-нотации (#ff2400)
  • Название цвета (green)
<span overline="single" overline_color="green">Эта разметка довольно гибкая</span>

rise

Изменение позиции текста по высоте, в одном из следующих форматов:

  • 1024-ая доля пункта (например, 4092)
  • Пункты (5pt)

Положительные значения используются для надстрочного индекса и отрицательные для подстрочного.

<span rise="4pt">вверх</span>

baseline_shift

Как rise, но с накоплением значений.

  • 1024-ая доля пункта (например, 4092)
  • Пункты (5pt)
  • Одно из именованных значений:
    • subscript
    • superscript
x<span baseline_shift="5pt">x<span baseline_shift="5pt" rise="5pt">x</span></span>

font_scale

Масштабирование шрифта.

Один из:

  • subscript
  • superscript
  • small-caps

Этот атрибут похож на font_size, но для вычисления размера используются метрики самого шрифта.

<span font_scale="small-caps">текст</span>

strikethrough

Перечеркивание текста. true или false.

<span strikethrough="true">удалите это</span>

strikethrough_color

Цвет перечеркивания текста (strikethrough), в одном из следующих форматов:

  • Цвет RGB в hex-нотации (#ff2400)
  • Название цвета (green)
<span strikethrough="true" strikethrough_color="red">
    удалите это прямо сейчас
</span>

fallback

Включить ли резервный шрифт для символов. true или false.

Когда это значение выключено, для отображения символов используется только шрифты, совпадающие с описанием используемого шрифта. Pango не будет пробовать использовать другие шрифты, которые могли бы содержать информацию о незнакомых символах. Поэтому по умолчанию данная опция включена, и большинству приложений выключать её не нужно.

<span fallback="false">ы</span>

lang

Код языка, обозначающий язык текста.

<span lang="en">well</span>

letter_spacing

Межсимвольный интервал, в 1024-ых долях пункта.

<span letter_spacing="2048">что это такое?</span>

gravity

Ориентация символов в сегменте текста.

Один из:

  • south
  • east
  • north
  • west
  • auto
<span gravity="north">Reverse Ideology</span>

show

Указывает, какие скрытые символы отображать.

Значение либо none, либо комбинация spaces, line-breaks и ignorables, разделенных |.

<span show="spaces|line-breaks">
    пробелы и

    переносы строк
</span>

insert_hyphens

Использовать ли дефисы для переноса строки (если перенос в середине слова). true или false.

<span insert_hyphens="true">scarlet police on ghetto patrol</span>

allow_breaks

Разрешить ли переносы строк, true или false.

<span allow_breaks="true">
    Надеюсь
    это
    было
    полезно
</span>

text_transform

Трансформация текста.

Один из:

  • none
  • lowercase
  • uppercase
  • capitalize
<span text_transform="capitalize">вам это не пригодится, почти наверняка</span>

Вспомогательные теги

Остальные теги являются псевдонимами для <span> и некоторого набора его атрибутов. Во многих сценариев использования они удобнее.

ТегОписание
<b>Жирный
<i>Курсив
<s>Перечеркнутый
<u>Подчеркнутый
<tt>Моноширинный шрифт
<big>Делает текст относительно больше, эквивалентно <span size="larger">
<small>Делает текст относительно меньше, эквивалентно <span size="smaller">
<sub>Надстрочный индекс
<sup>Подстрочный индекс

Эти теги не поддерживают атрибуты, поэтому если нужно использовать сразу несколько модификаций (например, сделать текст курсивным, большим и задать цвет), то нужно использовать span.