picom (Русский)
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 может быть запущен или остановлен вручную во время сессии или быть добавлен в автозагрузку в качестве фонового процесса для сессий. Существует несколько дополнительных аргументов, которые могут быть использованы для настройки предоставляемых композитных эффектов. Они включают в себя:
-b
: Запустить как фоновый процесс для сессии (Например, при автозапуске для оконных менеджеров по типу Openbox)-c
: Включить эффекты теней-C
: Отключить тени для панелей и доков (устаревшая опция, используйте #Отключение теней для отдельных окон)-G
: Отключить тени для окон приложений и объектов Drag-And-Drop (устаревшая опция, используйте #Отключение теней для отдельных окон)--config
: Использовать указанный конфигурационный файл
Имеется множество других опций, включая установку таймингов, управление дисплеями, прозрачность меню, границ окон и неактивных меню. Смотрите picom(1).
Чтобы вручную активировать композитные эффекты в текущей сессии, используйте следующую команду:
$ 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). Эта проблема была решена, но всё ещё может возникнуть у некоторых пользователей. С DRI3 такой проблемы нет.
Использование эффектов композитинга иногда может вызывать проблемы, такие как визуальные глюки при неправильной настройке для использования с другими приложениями и программами.
Conky
Чтобы отключить тени для окон Conky, добавьте следующее в ~/.conkyrc
:
own_window_class conky
В случае, если это решение ломается с эффектом размытия, вы можете попробовать добавить следующее в ~/.conkyrc
:
own_window_type= 'desktop'
Панель статуса 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 окна или исключить все окна без имени.
Исключить все окна без имени можно, используя следующие опции 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] для подробностей.
Невозможно изменить цвет фона при помощи 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]