picom (Русский)

From ArchWiki

Состояние перевода: На этой странице представлен перевод статьи picom. Дата последней синхронизации: 17 сентября 2023. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

picom — это автономный композитор для Xorg, предназначенный для использования с оконными менеджерами, которые не предоставляют функцию композитинга. picom — это форк compton, который является форком xcompmgr-dana, который является форком xcompmgr.

Установка

Установите пакет picom или пакет picom-gitAUR для разрабатываемой версии.

Настройка

Настройки по умолчанию расположены в /etc/xdg/picom.conf. Для изменения они могут быть скопированы в ~/.config/picom/picom.conf или ~/.config/picom.conf.

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

$ picom --config path/to/picom.conf

Для более подробной информации обратитесь к picom(1) § CONFIGURATION FILES.

Отключение теней для отдельных окон

Опция shadow-exclude может отключить тени для окон, если это необходимо. Для отключенных в данный момент окон смотрите [1].

Для отключения теней для меню добавьте следующие строки в wintypes в picom.conf:

# menu        = { shadow = false; };
dropdown_menu = { shadow = false; };
popup_menu    = { shadow = false; };
utility       = { shadow = false; };

Другие значения WINDOW_TYPE, которые могут быть использованы, описаны в стандарте EWMH: unknown, desktop, dock, toolbar, menu, utility, splash, dialog, normal, dropdown_menu, popup_menu, tooltip, notification, combo, и dnd.

Прозрачность

Для установки непрозрачности (а фактически прозрачности) для окон в фокусе и нет (для примера эмуляторы терминала) добавьте следующее в picom.conf:

opacity-rule = [
  "90:class_g = 'URxvt' && focused",
  "60:class_g = 'URxvt' && !focused"
];

Смотрите также #Окна во вкладках (тени и прозрачность).

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

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

Имеется множество других опций, включая установку таймингов, управление дисплеями, прозрачность меню, границ окон и неактивных меню. Смотрите picom(1).

Примечание: Если запущен другой композитор, его нужно отключить перед запуском picom.

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

$ picom &

Для автозапуска picom в качестве фонового процесса для сессии можно использовать аргумент -b (может вызвать зависание дисплея):

$ picom -b

Пример, где используются дополнительные аргументы, которые требуют указания значений:

$ picom -cfF -o 0.38 -O 200 -I 200 -t 0 -l 0 -r 3 -D2 -m 0.88

Многомониторная конфигурация

Если используется многомониторная конфигурация без xinerama - что означает, что X-сервер был запущен больше чем с одним монитором - в таком случае picom стартует по умолчанию только на одном мониторе. Он может быть запущен на всех мониторах при использовании переменной окружения DISPLAY. Для примера, запуск на нулевом дисплее X в фоне:

 DISPLAY=":0" picom -b

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

seq 0 3 | xargs -l1 -I@ picom -b -d :0.@

Оттенки серого

Можно преобразовать вид окон в оттенки серого при помощи шейдеров.

Как гласит picom(1), начните с редактирования шейдера по умолчанию из исходников picom.

/path/to/shader/file.glsl
#version 330

in vec2 texcoord;
uniform sampler2D tex;
uniform float opacity;

vec4 default_post_processing(vec4 c);

vec4 window_shader() {
	vec2 texsize = textureSize(tex, 0);
	vec4 color = texture2D(tex, texcoord / texsize, 0);

	color = vec4(vec3(0.2126 * color.r + 0.7152 * color.g + 0.0722 * color.b) * opacity, color.a * opacity);

	return default_post_processing(color);
}

Затем запустите picom, указав путь к шейдеру. Также, скорее всего, нужно будет использовать бекенд glx.

$ picom --backend glx --window-shader-fg /path/to/shader/file.glsl

Решение проблем

Последние версии picom имеют некоторые проблемы с ускорением DRI2, при этом наблюдалось сильное мерцание экрана (баг picom, баг mesa[устаревшая ссылка 2024-10-12 ⓘ]). Эта проблема была решена, но всё ещё может возникнуть у некоторых пользователей. С DRI3 такой проблемы нет.

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

Conky

Чтобы отключить тени для окон Conky, добавьте следующее в ~/.conkyrc:

own_window_class conky

В случае, если это решение ломается с эффектом размытия, вы можете попробовать добавить следующее в ~/.conkyrc:

own_window_type= 'desktop'

dwm и dmenu

Панель статуса dwm не обнаруживается какими-либо функциями picom для автоматического исключения элементов оконного менеджера. Ни dwm, ни dmenu не имеют статического id окна. Если вы хотите исключить их из прозрачности неактивного окна (или чего-то другого), вы должны либо пропатчить класс окна в исходном коде каждого из них, либо исключить их по менее точным атрибутам. Следующий пример со статусом dwm сверху, который позволяет получить разрешение, не зависящее от исключения местоположения:

$ picom <any other arguments> --focus-exclude "x = 0 && y = 0 && override_redirect = true"

Иначе, можно использовать файл конфигурации:

focus-exclude = "x = 0 && y = 0 && override_redirect = true";

Судя по всему, свойство "override redirect" ложно для большинства окон — наличие этого свойства в правиле исключения позволяет не исключать другие окна, нарисованные в левом верхнем углу (для примера, когда панель статуса dwm скрыта, x0 y0 будет соответствовать тому, что находится в основном стеке dwm).

Firefox

Смотрите #Отключение теней для отдельных окон.

Чтобы отключить тени для элементов Firefox, добавьте следующее в shadow-exclude в picom.conf:

"class_g = 'firefox' && argb",

Смотрите [2] для подробностей.

slock

Когда включена прозрачность для неактивных окон (аргумент -i при запуске команды), могут быть некоторые проблемы при использовании slock. Одно из решений — смена значения прозрачности на 0.2. Для примера, аргументы picom при запуске его командой:

$ picom <any other arguments> -i 0.2

Или при использовании конфигурационного файла:

inactive-dim = 0.2;

В качестве альтернативы, вы можете попробовать исключить slock по id окна или исключить все окна без имени.

Примечание: Некоторые программы могут менять id для каждого своего экземпляра, но, похоже, у slock он статический. Кто-то более осведомлённый может подтвердить, что это действительно так, а до этого используйте на свой страх и риск.

Исключить все окна без имени можно, используя следующие опции picom:

$ picom <other arguments> --focus-exclude "! name~=''"

Узнать id окна slock можно при помощи команды:

$ xwininfo & slock

Быстро нажмите в любом месте экрана (перед выходом из slock) и введите ваш пароль для разблокировки. Вы должны увидеть id окна в выводе:

xwininfo: Window id: 0x1800001 (has no name)

Возьмите полученный id и исключите его при помощи:

$ picom <any other arguments> --focus-exclude 'id = 0x1800001'

Или при использовании конфигурационного файла:

focus-exclude = "id = 0x1800001";

Мерцание

Проявляется в полностью развёрнутых окнах (в сессиях без каких-либо панелей) с picom.conf по умолчанию и устраняется следующей опцией:

unredir-if-possible = false;

Смотрите [3] для подробностей.

Разрыв картинки в полноэкранном режиме

Если вы встретили разрыв картинки в полноэкранном режиме при воспроизведении видео, смотрите #Мерцание.

Задержка при использовании xft-шрифтов

Если вы столкнулись с сильной задержкой при использовании Xft-fonts в приложениях по типу xterm или urxvt попробуйте следующие опции:

--xrender-sync --xrender-sync-fence

или бекенд xrender.

Смотрите [4] для подробностей.

Окна во вкладках (тени и прозрачность)

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

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

"_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'"

Отрисовка нижележащих окон может быть отключена добавлением следующий строк в picom.conf:

opacity-rule = [
  "95:class_g = 'URxvt' && !_NET_WM_STATE@:32a",
  "0:_NET_WM_STATE@[0]:32a *= '_NET_WM_STATE_HIDDEN'",
  "0:_NET_WM_STATE@[1]:32a *= '_NET_WM_STATE_HIDDEN'",
  "0:_NET_WM_STATE@[2]:32a *= '_NET_WM_STATE_HIDDEN'",
  "0:_NET_WM_STATE@[3]:32a *= '_NET_WM_STATE_HIDDEN'",
  "0:_NET_WM_STATE@[4]:32a *= '_NET_WM_STATE_HIDDEN'"
];

Учтите, что URxvt - это имя класса Xorg вашего терминала. Измените его, если используете другой терминал. Вы можете узнать класс окна при помощи команды xprop WM_CLASS и нажатия на нужное окно.

Смотрите [5] для подробностей.

Важно: При использовании i3 и kitty в качестве терминала это действие (на момент 2020-08-31) заморозит все экземпляры kitty во вкладках, когда вы перезапустите i3: [6] является возможным решением аналогичной проблемы Intel graphics (Русский)#Проблемы с DRI3

Невозможно изменить цвет фона при помощи xsetroot

В данный момент, picom несовместим с опцией -solid у xsetroot, обходное решение - использование hsetroot для установки цвета фона:

$ hsetroot -solid '#000000'

Смотрите [7] для подробностей.

Разрыв экрана на проприетарных драйверах NVIDIA

Попробуйте добавить следующее в picom.conf:

vsync = true;

Задержка с проприетарными драйверами NVIDIA и FullCompositionPipeline

Попробуйте запустить picom с:

--backend xrender

или добавьте

backend = "xrender";

в ваш picom.conf.

Смотрите [8] для подробностей.

Другим способом уменьшить лаг при использовании бекенда glx является отключение опции "allow flipping" [9] в параметрах nvidia (OpenGL section). Также это можно сделать из командной строки:

$ nvidia-settings -a 'AllowFlipping=0'

Чтобы загрузить настройки после перезагрузки (смотрите статью Автозапуск), выполните

$ nvidia-settings --load-config-only

Утечка памяти в Xorg с проприетарными драйверами NVIDIA

Смотрите #Задержка с проприетарными драйверами NVIDIA и FullCompositionPipeline.

Slock после засыпания

При использовании сервиса systemd для активации slock во время засыпания или гибернации, экран может оказаться разблокированным на несколько секунд после возобновления работы. Чтобы это предотвратить, отключите угасание окон:

$ picom --no-fading-openclose

Совместный доступ к экрану

Наложения теней совместного доступа к экрану и теней всплывающих окон Zoom Meetings можно избежать добавления следующего в shadow-exclude.

shadow-exclude = [
  "name = 'cpt_frame_xcb_window'",
  "class_g ?= 'zoom'",
];

Размытый совместный доступ к экрану можно отключить, добавив Zoom Meetings в blur-background-exclude

blur-background-exclude = [
  "class_g ?= 'zoom'",
];

Для Microsoft Teams красная граница вокруг разделяемого контента реализована с использованием почти полностью прозрачного окна. Включенное размытие делает невозможной работу и должно быть отключено при помощи:

shadow-exclude = [
  "name = 'rect-overlay'",
];

blur-background-exclude = [
  "name = 'rect-overlay'",
];

Отключение эффекта затухания окна при переключении между рабочими пространствами

Добавление флагов --fade-in-step=1 --fade-out-step=1 --fade-delta=0 может отключить затухание окон и эффект затухания при переключении на другое "рабочее место". [10]

Смотрите также