Сейчас будет еще одна «трешевая» история из мира открытого ПО, из тех что не рассказывают детям, дамам и сотрудникам ППС.

XFCE
Xfce это такое очень популярное рабочее окружение (Desktop Environment), яркий представитель опенсорса, который вы неоднократно могли видеть в моих статьях и скриншотах.
Одно время им пользовался даже сам Линус Торвальдс, мотивировав переезд чрезмерным ожирением KDE и уходом в лунатизм разработчиков Gnome.
Штука популярная и известная, некий баланс разумности и последний барьер, разделяющий откровенную гиковскую дичь вроде тайловых менеджеров и тяжеловесные современные среды, разрабатываемые большими командами при поддержке мировых корпораций.
БАГ
Разумеется в Xfce есть баги и недоработки, не такие феерические как например в KDE («Плазма не падает» ага), но тоже временами доставляющие проблемы и долгоживущие. Как раз об одном таком «долгожителе» и пойдет наш сегодняшний рассказ.
Как это выглядит в действии:
ноутбук засыпает, ноутбук просыпается и на экране внезапно появляется.. диалог «Display Settings».
Казалось бы мелочь, ну появляется и появляется (причем не на всех ОС и ноутбуках), б‑г с ним и без того проблем навалом.
Но во‑первых временами появляется несколько копий этого диалога, что огорчает куда сильнее, поскольку приходится их каждый раз закрывать. А во‑вторых автор не просто так два десятка лет занимается разработкой, чтобы позволить какой‑то там программе безнаказанно творить беспредел.
Так что я полез за боевым топором компилятором.
Ресерч
Первый же беглый поиск дал понять, что это не осеннее обострение проблема есть далеко не только у меня, вот например сообщение с официального форума Xfce от 2021 года:

А вот об этой проблеме пишут на форуме Linux Mint:

И на форуме Manjaro Linux:

И даже на форуме FreeBSD:

Так что проблема действительно есть, причем именно в Xfce а не в конкретной ОС, дистрибутиве или настройках окружения.
Дальнейшие изыскания привели в багтрекер Xfce, к этому багу из 2013 (!) года:

Я насчитал двадцать (20) дублей, закрытых за все время жизни этого тикета, но поскольку с 2013го года сам трекер успел переехать с BugZilla на Gitlab (оригинальный тикет находится тут) — гарантированно что-то успело потеряться.
Несмотря на сильно отличающееся описание, если посмотреть переписку под тикетом — можно увидеть знакомые рога и копыта очертания бага с открытием диалога:

А вот это сообщение в обсуждении навело на возможное место в исходном коде, ответственное за проблему:

Разумеется с 2021го года логика в исходниках успела измениться до неузнаваемости и в актуальной на момент написания статьи версии 4.20 это место выглядит иначе:

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

Из-за данной логики и происходит отображение диалога «Display Settings», по замыслу авторов — как приглашение к настройке нового устройства, когда например подключается второй монитор или проектор.
"Благими намерениями" да да, вы правильно поняли.
Обратите внимание на вот такую проверку:
/* Start the display dialog according to the user preferences */
if (action == ACTION_ON_NEW_OUTPUT_SHOW_DIALOG)
{
..
Чуть выше по коду в этом же файле displays-x11.c
происходит чтение из настроек:
gint action = xfconf_channel_get_int (channel, NOTIFY_PROP, ACTION_ON_NEW_OUTPUT_DEFAULT);
if (action != ACTION_ON_NEW_OUTPUT_DO_NOTHING || old_outputs->len == 0)
{
..
Таким образом по идее создателей, если в этом диалоге в поле «When display is connected» выставлено значение «Do nothing»:

Тогда никакого диалога при просыпании ноутбука появляться не будет. Но есть нюанс.
Нюанс
У Xfce традиционно не очень хорошо с настройками — она их регулярно теряет и сбрасывает при обновлениях, перезаписывает новыми опциями и вообще всячески ломает.
Из‑за чего диалог «Display Settings» появляется снова и снова.
Я решил что хватит это терпеть видеть сей проклятый диалог при просыпании ноутбука более не желаю, поэтому применил спецсредства.
Решение
Думаю нетрудно догадаться, что радикальное решение оказалось очень простым:
/* Start the display dialog according to the user preferences */
if (action == ACTION_ON_NEW_OUTPUT_SHOW_DIALOG)
{
// const gchar *cmd = helper->outputs->len <= 2 ? "xfce4-display-settings -m" : "xfce4-display-settings";
// xfce_spawn_command_line (NULL, cmd, FALSE, FALSE, TRUE, NULL);
g_print("Ignored 'Display Settings' dialog \n");
}
Да, весь блок (он такой один), отвечающий за запуск диалога «Display Settings» был самым банальным образом закомментирован в файле displays-x11.c
.
Wayland
Несмотря на то что автор не пользуется Wayland, Xfce его поддерживает и в файле displays-wayland.c
есть полностью аналогичное место, где также зашит вызов диалога «Display Settings».
Так что если вы используете Wayland и столкнулись с описываемой проблемой — теперь знаете где именно искать и что делать.
Однако поправить код в таком проекте это лишь начало, ключевая проблема — как это потом собрать и запустить.
Сборка
На самом деле мне сильно повезло, что исправление выше находится в небольшом и автономном консольном приложении xfsettingsd
, исходники которого в свою очередь находятся в отдельном репозитории xfce4-settings.
Так что экстремальных приключений в виде сборки всего Xfce из исходников с последующей установкой удастся избежать.
Забираем исходники xfce4-settings:
git clone https://gitlab.xfce.org/xfce/xfce4-settings.git
Переключаемся на релизную ветку той версии Xfce, которая у вас уже установлена — не забываем, что мы правим лишь один небольшой сервис, а все остальное остается из пакетной версии:
git checkout origin/xfce-4.20 -b xfce-4.20
Вытаскиваем зависимые репозитории:
git submodule update --init --recursive
Запускаем сборку:
./autogen
./configure
gmake
В каталоге xfsettingsd
появится одноименный бинарник с измененной логикой.
Я не стал заморачиваться с отдельным каталогом в PATH и изучать доступные в Xfce механизмы переопределения путей, вместо этого просто подменив бинарник:
cp ./xfsettingsd/xfsettingsd /usr/local/bin/
И все, больше никаких надоедливых диалогов.
Так выглядит проверочное сообщение, добавленное вместо закомментированных вызовов:

Эпилог
Разумеется такое исправление никогда не примут в апстрим Xfce (занятый переездом на meson) и без навыков программирования вы обречены на вечные муки и страдания наблюдать этот диалог до скончания времен — пока при очередном обновлении не слетит конфигурация.
Добавлю, что и сам этот функционал принудительного открытия диалога настроек при изменении оборудования — откровенно дурацкий, из серии «хотели как лучше» и точно нуждается в пересмотре.
Но повлиять «с моей галерки» на авторов Xfce разумеется никакой возможности нет.
P.S.
Более вольный оригинал в нашем блоге и на Яндекс Дзене.
Еще каждый вторник мы теперь выпускаем «велоподкаст»:
Где я детально раскрываю тот или иной аспект разработки, проектирования или ИТ в целом.
Комментарии (13)
Ma_1evich
07.09.2025 16:57Та или иная проблема с мульти-мониторностью, кажется, не встречается только в GNOME. Тот же KDE может спокойно раз в неделю терять герцовку после сна или ребута.
alex0x08 Автор
07.09.2025 16:57Я вообще не понимаю зачем пытаться решать проблему настройки через DE, причем в принудительном порядке. Это ломает всю концепцию Xorg и в итоге какой-нибудь Fvwm2 работает стабильнее KDE.
Jijiki
07.09.2025 16:57не просто Fvwm2 а просто даже условный tinywm или его улучшенная версия, кстати, проще тогда вообще ВМ написать. Логика там не сложная на тайлах, единственное XRepaint(сопоставление клиента фрейму) придётся вникать(если хочется не тайловый) и обработка кнопок на окне и перемещение
я давно понял на иксах проще иметь или мотиф или свой вм, там логики почти нет потомучто( тоесть стековый менеджер окон )
JBFW
07.09.2025 16:57Window Maker для X11, Wayfire для Wayland - а больше от оконных менеджеров там ничего и не нужно.
Но баг с "новым монитором" можно поймать и внутри ядра - когда включается HDMI и ядро вдруг обнаруживает "новый монитор".
Хотя там явно связано с особенностями железа.
ogogoggogog
07.09.2025 16:57>откровенную гиковскую дичь
в статье не хватает объяснения чем таким тот же windowmaker не дотягивает до этого вашего xfce.
alex0x08 Автор
07.09.2025 16:57чем таким тот же windowmaker не дотягивает до этого вашего xfce.
Если убрать букву n из названия то можно найти кучу фото интересных мечей, а с xfce такое не прокатывает )
А если серьезно то Xfce это «desktop environment», когда WindowMaker всего лишь оконный менеджер. Таскбар, Systray, интеграция с DBus и например индикатор заряда батареи — в комплекте.
В WindowMaker и Fvwm это все внешние утилиты, каждая со своим набором проблем.
dyadyaSerezha
Ну как же так? Ноутбук засыпает, просыпается мафия!
Подкаст на рутубе? Хмм... А чего не на этом... как его... ну вы поняли.
alex0x08 Автор
Мы выкладываем на четыре платформы сразу: Ютуб, Рутуб, ВК Видео, Платформа
Так что всем хватит )
dyadyaSerezha
Та не, я про Мах! Говорят, на нем уже 75 миллиардов айтишников зарегистрировались. ;)
alex0x08 Автор
Он в бете еще, каналы даже тестируются, но конечно я там тоже есть.