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

Картина "Хром шатает батарею цифрового Ильича".
Картина "Хром шатает батарею цифрового Ильича".

Отдыхаем хорошо

Как и все нормальные люди, я временами смотрю фильмы, сериалы и длинные видео на ноутбуке и чтобы тот случайно не ушел в сон во время просмотра — включаю на нем «режим презентации».

Поскольку за последние годы все кино переместилось в веб, большую часть времени теперь используется не программа-видеоплеер, а обычный браузер Chrome/Chromium.

После одного из обновлений, стал замечать, что браузер-то оборзел научился самостоятельно перехватывать засыпание ноутбука, блокировку экрана и запуск скринсейвера во время просмотра видео, без всяких «режимов презентации».

Затем такое поведение появилось и на обычных сайтах — без видимого видео или аудио-контента.

Без каких-либо сообщений, запросов и подтверждений на подобные действия.

Затем ноутбук впервые разрядился в ноль, будучи оставленным с открытой страницей какого-то левого сайта, ни suspend ни hibernate внезапно не сработали.

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

Изучение проблемы

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

Оказалось что сия дичь действительно массовая и хорошо известная:

Разумеется тут не про порно, человек просто собирал ядро из исходников. "Sensitive situation".
Разумеется тут не про порно, человек просто собирал ядро из исходников. "Sensitive situation".

Хотя в статье речь пойдет о Xfce, аналогичным обазом ведут себя все «большие» окружения — KDE, Gnome, Cinnamon и так далее:

Отдельная «шутка юмора» — попытка втащить поддержку такого поведения в.. Sway:

Monitor dbus and inhibit swayidle when Firefox or Chromium request it

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

Разумеется по этой проблеме есть давно заведенный тикет в трекере, с длиннющей перепиской, с приложенными дампами памяти и техническими деталями, открытый уже 11 лет:

Как видите тут стоит низкий приоритет и не назначен ответственный, ниже станет понятно почему.
Как видите тут стоит низкий приоритет и не назначен ответственный, ниже станет понятно почему.

Помимо означенного тикета в публичном трекере Ubuntu, где тусуются в основном простые пользователи, нашелся еще один, не менее эпичный тикет в трекере самого Chromium, висящий там аж с 2013 года:

Если прокрутить в самый низ страницы, можно заметить статус «Fixed» и битую ссылку на коммит (поскольку трекер переехал), суть которого — легализация специального API для управления блокировкой экрана и засыпанием.. прямо из кода на странице!

Примерно такого:

// The wake lock sentinel.
let wakeLock = null;

// Function that attempts to request a screen wake lock.
const requestWakeLock = async () => {
  try {
    wakeLock = await navigator.wakeLock.request();
    wakeLock.addEventListener('release', () => {
      console.log('Screen Wake Lock released:', wakeLock.released);
    });
    console.log('Screen Wake Lock released:', wakeLock.released);
  } catch (err) {
    console.error(`${err.name}, ${err.message}`);
  }
};

// Request a screen wake lock…
await requestWakeLock();
// …and release it again after 5s.
window.setTimeout(() => {
  wakeLock.release();
  wakeLock = null;
}, 5000);

Как тебе такое, Илон Маск?

Повторяю для тех, кто еще не понял и не осознал:

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

И защитить от такого может лишь знание языка С и эта замечательная статья.

Механизм работы

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

Есть одна неведомая штука в Linux-системах, под названием systemd:

systemd is a suite of basic building blocks for a Linux system. It provides a system and service manager that runs as PID 1 and starts the rest of the system.

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

Для примера, вот так выглядит набор системных сервисов Windows:

Ни один из этих сервисов не поддается интерпретации обывателем.
Ни один из этих сервисов не поддается интерпретации обывателем.

У замечательного systemd с недавних пор появился абсолютно «сказочный» функционал, созданный для перехвата управления процессами засыпания и выключения системы:

systemd 183 and newer include a logic to inhibit system shutdowns and sleep states. This is implemented as part of systemd-logind.daemon(8)

Отключаемый, разумеется.

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

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

Можете конечно попробовать заблокировать механизм inhibit в systemd, но все последствия — на вас и вашей совести.

Мы же пойдем немного другим, менее радикальным путем.

Менеджер управления питанием Xfce

Этой командой можно посмотреть список запущенных перехватчиков:

systemd-inhibit --list

В моей системе (Linux Manjaro) вывод выглядит следующим образом:

Обратите внимание, что самого браузера Chrome в списке нет, зато есть xfce4-power-manager — менеджер управления питанием из Xfce, который принимает входящие запросы на перехват и решает что делать дальше.

Остальные сервисы обрабатывают только события засыпания (sleep).

Так что наша цель это xfce4-power-manager , именно туда мы сейчас и залезем, для нанесения правок.

xfce4-power-manager — по большей части фоновое приложение, автоматически запускаемое при старте среды Xfce. Но в отличие от прошлого поциента, тут есть некоторый интерфейс и взаимодействие с пользователем, которое происходит с помощью иконки в трее:

По нажатию правой кнопки мыши, появится меню со списком дерзких приложений, которые в данный момент перехватывают управление питанием:

Так что ответственный за весь этот электронный беспредел был наконец четко определен.

Кровавый патчинг

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

Автор использовал версию 4.20, установленную на момент написания статьи.

Место предстоящей правки — файл xfpm-inhibit.c, в который вынесена вся логика по обработке перехватов (inhibit).

Нас интересует метод xfpm_inhibit_inhibit,строка 370, где начинается обработка входящего запроса на перехват управления.

Код метода небольшой, поэтому привожу его целиком:

static gboolean
xfpm_inhibit_inhibit (XfpmInhibit *inhibit,
                      GDBusMethodInvocation *invocation,
                      const gchar *IN_appname,
                      const gchar *IN_reason,
                      gpointer user_data)
{
  const gchar *sender;
  guint cookie;

  if (IN_appname == NULL || IN_reason == NULL)
  {
    g_dbus_method_invocation_return_error (invocation, 
                                  XFPM_ERROR, 
                                  XFPM_ERROR_INVALID_ARGUMENTS,
                                           _("Invalid arguments"));
    return TRUE;
  }

  sender = g_dbus_method_invocation_get_sender (invocation);
  cookie = xfpm_inhibit_add_application (inhibit, IN_appname, sender);

  XFPM_DEBUG ("Inhibit send application name=%s reason=%s sender=%s", 
                                          IN_appname, IN_reason, sender);

  xfpm_inhibit_has_inhibit_changed (inhibit);
  xfpm_dbus_monitor_add_unique_name (inhibit->priv->monitor, 
                                       G_BUS_TYPE_SESSION, sender);
  xfpm_power_management_inhibit_complete_inhibit (user_data, 
                                       invocation, cookie);
  return TRUE;
}

Обратите внимание на вызов метода XFPM_DEBUG, содержащего текст отладочного сообщения. Все подобные сообщения становятся видны только если запустить xfce4-power-manager с ключом --debug.

Именно так и было найдено место будущей правки, после сообщения в консоли:

xfpm_inhibit_inhibit(): Inhibit send application name=/usr/lib/chromium/chromium reason=Video Wake Lock sender=:1.459

Что мы имеем в итоге:

  • есть единственная точка входа (метод) в менеджере управления питанием, с которой начинается регистрация перехватчика управления;

  • метод принимает на вход название приложения (полный путь), посягнувшего на такой перехват.

Думаю не надо иметь высшее техническое образование, чтобы догадаться как будет выглядеть финальное решение:

if (strstr(IN_appname,"chrom") != NULL ) {
	XFPM_DEBUG ("Chrome уходи!");  
	return TRUE;  
}

Для не знающих и не владеющих:

метод strstr проверяет на входжение слова «chrom» в названии дерзкого приложения, которое отправило запрос на перехват управления питанием, если оно там есть — происходит немедленный выход из этого метода, а запрос игнорируется.

Вот так, всего лишь 4 строчки на С, вставленные в нужном месте, сразу после проверки на пустоту обламывают рога оборзевшему браузеру, созданному мировой корпорацией, которая решила, что «мы знаем как лучше».

Так это выглядит в действии после наложения моего «кровавого» патча:

В этот знаменательный день браузер Chrome.. пошел лесом.
В этот знаменательный день браузер Chrome.. пошел лесом.

Сборка

Теперь поговорим о печальном — о сборке всего этого цирка с конями.

Проект xfce4-power-manager это уже существенная часть Xfce, чтобы собрать его из исходников и заставить работать — придется постараться.

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

Куда проще скачать готовый архив со специально подготовленными исходниками релизной версии.

Напоминаю что мы патчим версию 4.20.

Во-вторых, придется установить в систему довольно много библиотек и утилит для разработки:

  • A working GNU toolchain

  • Gtk+ and Glib headers, in some distributions called the -devel packages

    • Xfce 4.20 requires Gtk+ 3.24 and Glib-2.0 >= 2.72 (See also: 4.20 dependencies)

      • Same version for gmodule-2.0, gobject-2.0, gthread-2.0, gio-2.0 and gdbus

    • gdk-pixbuf-2.0 >= 2.42.8

    • gobject-introspection >= 1.72

    • gtk-layer-shell 0.7.0

    • pkgconfig

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

Таков путь джедая, что поделать.

Распаковываем скачанный архив с исходниками и запускаем скрипт configure:

tar xvjf ~/Downloads/xfce4-power-manager-4.20.0.tar.bz2 
cd fce4-power-manager-4.20.0
./configure --disable-wayland

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

  • wayland 1.20

  • wayland-protocols 1.25

Добавляем описанный выше блок в файл src/xfpm-inhibit.c и наконец запускаем сборку:

make

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

pkill -f xfce4-power-manager
./src/xfce4-power-manager --debug

Дальше открываем в Chrome любую страницу с видео и смотрим выдаваемые сообщения:

Победа.
Победа.

Разумеется, после такого патча вам придется вручную включать и отключать режим презентации (Presentation mode) при просмотре длинных роликов в браузере, зато процесс будет полностью контролируемым.

Также подобным образом можно «обламывать рога» и другим интересным приложениям, дерзнувшим покуситься на управление питанием — с недавних пор за подобным неблаговидным делом был замечен и Firefox.

Эпилог

Грустно наблюдать (в который уж раз), как некогда хороший софт, по мере роста популярности скатывается в полное УГ отрицание пользовательского опыта и начинает считать своих пользователей полными идиотами:

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

И лишь владение языком С и навыки системного программирования все еще позволяют ставить на место оборзевшие программы — изучайте же инженерное дело настоящим образом!

В одной из следующих статей расскажу о патчах для самого браузера Chrome: «как убрать detach вкладок при таскании», «как вернуть пустую страницу для новой вкладки» и многое другое — следите за анонсами на нашем канале.

Менее цензурный оригинал статьи как обычно в нашем блоге.

Комментарии (42)


  1. CoolCmd
    30.11.2025 20:33

    а не проще сделать простенькое расширение браузера (одна строка js), меняющее navigator.wakeLock.request на заглушку? бонус: расширение будет работать не только в chrome, но и в firefox и safari.


    1. alex0x08 Автор
      30.11.2025 20:33

      Это системная функция браузера, не факт что сработает.

      Ну и Хром такой не один, как только в systemd сделали дырку для управления питанием — понеслось, теперь и плееры и видеоредакторы и калькуляторы лезут блокировать засыпание.


      1. CoolCmd
        30.11.2025 20:33

        Это системная функция браузера, не факт что сработает.

        js на страницах блокировать сон не сможет, вы же этого хотите. можно указать отдельные сайты.

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


    1. aborouhin
      30.11.2025 20:33

      В Firefox оно, вроде, штатно отключается через about:config (dom.screenwakelock.enabled и media.video-wakelock, не вникал детально, в чём разница в этих двух параметрах)

      А по поводу того, как проще - тогда уж надо бы PR в XFCE оформлять, который добавляет настройку "Allow apps to request wakelock", лучше ещё и с выбором приложений, которым можно или нельзя. Иначе пересобирать со своим патчем при каждом обновлении будет, хм... утомительно.


      1. alex0x08 Автор
        30.11.2025 20:33

        Это еще один невозможный с точки зрения технических специалистов PR, уже проходили с открытием диалога.


  1. DSolodukhin
    30.11.2025 20:33

    А можно раскрыть, в чем проблема? Вы хотите, чтобы комп засыпал, пока вы кино смотрите?


    1. alex0x08 Автор
      30.11.2025 20:33

      Проблема в том, что "дырку для кино" стали использовать все подряд, например чтобы сделать блокирование перехода в спящий режим все время пока открыта страница сайта.

      В качестве "фишки".

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


      1. DSolodukhin
        30.11.2025 20:33

        Да, интересно, не сталкивался сам, если честно.

        А не смотрели, что приходит в reason? Может там можно различть как-то когда сам браузер запрашивает или это шаловливые ручки сайтописателя?


        1. alex0x08 Автор
          30.11.2025 20:33

          На скриншотах же видно сообщение "Playing audio", так что оно достаточно общее, хотя и обязательное (судя по коду).

          На самом деле сам факт программной инициации из JS столь системного действа как управление питанием - лишь половина проблемы, есть и вторая:

          задумайтесь, что произойдет если браузер отправит сообщение через dbus на запрос перехвата и оно будет принято, а затем браузер упадет.

          спойлер:

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

          Цирк короче.


  1. AcckiyGerman
    30.11.2025 20:33

    Извините за критику, но это не решение, а временный костыль.

    if (strstr(IN_appname,"chrom") != NULL ) {

    А если пользователь откроет Brave|Firefox|Opera|любой другой браузер?

    А не перезапишется ли патч при обновлении? А если не перезапишется, а у XFCE API для менеджера управления питанием поменялось?

    А что насчёт других DE?

    Суть проблемы не решена. При просмотре одного видео (фильма) ноут засыпать не должен, а при просмотре другого (рекламы) - должен. Но с точки зрения браузера разницы никакой нет!

    Проблема злоупотребления полезной технологией не нова. С уведомлениями на сайтах тоже самое - полезно для условного Gmail, но маркетологи начали злоупотреблять, браузеры начали запрашивать разрешения и теперь на каждом втором сайте нужно отклонять "разрешите показывать вам уведомления".

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

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


    1. alex0x08 Автор
      30.11.2025 20:33

      А если пользователь откроет Brave|Firefox|Opera|любой другой браузер?

      Тогда он быстренько изучает С и добавляет условие для этого браузера.

      А не перезапишется ли патч при обновлении?

      Обязательно перезапишется и придется заново повторять процесс. Теперь понимаете ценность source-based дистрибутивов?

      А если не перезапишется, а у XFCE API для менеджера управления питанием поменялось?

      Если будет любое расхождение версий - все немедленно сломается. И придется повторять все шаги для новой версии. Зато сможете на себе ощутить роль ментейнера пакета, всю боль и страдания при обновлениях апстрима.

      Суть проблемы не решена.

      Это к Минобороны, только они смогут жахнуть по штаб-квартире Гугла, или где там сидит центр разработки Хрома.

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

      Вы не поняли глубину пробемы )

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

      Теперь понятен смысл статьи?


      1. AcckiyGerman
        30.11.2025 20:33

        даже если вы закроете крышку ноутбука

        ну это уже свинство конечно.


      1. squns
        30.11.2025 20:33

        Браузер заблокирует засыпание, даже если вы закроете крышку ноутбука (если она управляется через менеджер питания).

        Я не настоящий линуксоид, но похоже на проблему приоритетов. Неужели в systemd нет что-то похожего?


        1. alex0x08 Автор
          30.11.2025 20:33

          Скажу страшное: скорее всего в Windows и MacOS все тоже самое.


          1. squns
            30.11.2025 20:33

            Честно говоря, никогда не сталкивался на маке. Да и на винде тоже, хотя там могло за пару лет что-то и изменится


      1. R0bur
        30.11.2025 20:33

         Теперь понимаете ценность source-based дистрибутивов?

        А на source-based дистрибутивах энергопотребление на пересборку программ при обновлениях не перекрывает проблему энергопотребления из-за бессонницы браузера?


    1. event1
      30.11.2025 20:33

      Извините за критику, но это не решение, а временный костыль.

      Это вполне решение, но подходит оно очень ограниченному кругу пользователей.


  1. kma21
    30.11.2025 20:33

    Вот так и получаются новые дистрибутивы или форки софта. Когда авторы делают какую-то несусветную дичь. По крайней мере, по мнению автора форка.

    Интересно, а насколько глубоко мейнтейнеры дистрибутива могут лазить руками в код и менять его? Вот можно выпилить данную функцию из XFCE и положить в репозитории своего БолгенОС?
    Я не про лицензию или про технические возможности. Я про логику и некую политику - где граница возможностей мейнтейнера дистрибутива. Когда он становится уже разработчиком?


    1. alex0x08 Автор
      30.11.2025 20:33

      а насколько глубоко мейнтейнеры дистрибутива могут лазить руками в код и менять его?

      Очень глубоко, примерно по локоть :) В качестве примера так выглядит список патчей для Хрома от команды FreeBSD.

      Когда он становится уже разработчиком?

      Сразу с рождения ) На самом деле это достаточно абстрактные вещи, как и самоопределение программистов.


    1. Grigo52
      30.11.2025 20:33

      Гляньте список патчей, которые Debian или Red Hat накладывают на ядро Linux или на тот же Firefox, там могут быть сотни исправлений, так что технически мейнтейнер может выпилить эту функцию, да, но политически вряд ли. Будет слишком сильное расхождение с апстримом, которое потом будет больно поддерживать.


  1. baalmef
    30.11.2025 20:33

    Хотя в статье речь пойдет о Xfce, аналогичным обазом ведут себя все «большие» окружения — KDE, Gnome, Cinnamon и так далее

    Немного подушню, но вообще именно Xfce4 по всем параметрам входит в тройку "больших" окружений вместе с Кедами и гномощелью. Cinnamon, увы, пока лишь в числе стремящихся.


    1. alex0x08 Автор
      30.11.2025 20:33

      Xfce4 по всем параметрам входит в тройку "больших" окружений

      Ну вот, а когда-то считался "легковесной заменой KDE".


      1. baalmef
        30.11.2025 20:33

        Смысл там давно не в легковесности, да и кому нужна легковесность от DE, когда всё равно везде нужно будет работать в одних и тех же современных браузерах.


        1. alex0x08 Автор
          30.11.2025 20:33

          Тем не менее простые юзеры на тайловых менеджерах и Fvwm почему-то все также не сидят.


  1. Stanislavvv
    30.11.2025 20:33

    Если правильно помню, можно запретить управление питанием через политики dbus при помощи конфига в недрах /etc/dbus-1.

    Правда, не помню, с какой точностью это можно запретить, то есть, можно ли это запретить только для приложения.


    1. alex0x08 Автор
      30.11.2025 20:33

      Конечно можно, но прежде чем запрещать, стоит осознать сущность бытия механизм работы:

      Хром посылает сообщение о перехвате, DBus его пропускает в специальный обработчик inhibit, которым является xfce4-power-manager, который решает что с этим делать.

      Если xfce4-power-manager решает что можно - посылает еще один сигнал через DBus уже к systemd для реализации этой самой блокировки.

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

      И абсолютно все участники этой сложной схемы просто хотели как лучше, разумеется.


      1. Stanislavvv
        30.11.2025 20:33

        Раз per-app не получится... Остаётся вариант написания фильтрующего dbus-proxy и подмены им dbus для избранных. Всё равно, часть софта через firejail идёт.


  1. Grigo52
    30.11.2025 20:33

    Патчить системные компоненты вручную это конечно круто и по хакерски, но это путь воина-одиночки

    Как верно заметили в комментариях, после первого же apt upgrade весь ваш патч улетит в трубу. Более системное решение это либо PR в апстрим, либо создание своего пакета с патчем для своего дистрибутива, либо как предложили, настройка политик dbus


    1. Fromych
      30.11.2025 20:33

      Можно, да. Только проблема в том что апстрим это чинить не спешит, тикеты там годами висят. Поэтому пока дойдёт до фикса, проще собрать свой маленький пакет с патчем и обновлять его вместе с системой
      dbus-политики вариант норм, но иногда режут и нужные вещи. Тут уже каждый выбирает что ему больнее: жить с багом или подправить поведение под себя


  1. event1
    30.11.2025 20:33

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

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

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

    Если приложение не умеет само отключать нужный функционал (кстати, хороший броузер умеет), то можно как-то отфильтровать такие вызовы на dbus.


    1. alex0x08 Автор
      30.11.2025 20:33

      Если приложение не умеет само отключать нужный функционал (кстати, хороший броузер умеет), то можно как-то отфильтровать такие вызовы на dbus.

      Тогда вопрос архитектурному гуру: что будет когда ваш "хороший браузер" обновится и утеряет важную настройку, отвечающую за вопрос с питанием?

      А это постоянно происходит и с хорошими браузерами и с плохими и даже с самими systemd и DBus, по той простой причине, что серьезная поддержка миграций конфигурации стоит чудовищных затрат и является проблемой даже в коммерческом софте, например в Windows.

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


      1. event1
        30.11.2025 20:33

        что будет когда ваш "хороший браузер" обновится и утеряет важную настройку, отвечающую за вопрос с питанием?

        Тогда придётся фильтровать dbus вызовы. В любом случае эта странная конфигурация останется на этой странной машине


      1. krendelbok
        30.11.2025 20:33

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

        Потеряв голову по волосам не плачут (с). Это ваш костыль ужасно выглядит и никому больше не подойдет. Говорю как чувак, что патчил 2 месяца ollama, чтобы она поддерживала мою видюху. Надоело очень быстро и выкинул её в топку решением, которое делает это из коробки.


  1. ogogoggogog
    30.11.2025 20:33

    Перепись оверинженегров. Просто в кроне проверяем заряд батареи и на Х% говорим shutdown +1


  1. Fromych
    30.11.2025 20:33

    Даже не думал что wake lock в браузере стал такой проблемой


  1. ganzmavag
    30.11.2025 20:33

    Надеюсь для мобильных версий они до такой штуки не додумались? По крайней мере, если браузер в фоне, а не на первом плане.


  1. killbond
    30.11.2025 20:33

    У меня была похожая проблема где-то в начале лета. ChatGPT Электронный болван посоветовал отслеживать статус воспроизведения видео/аудио через Wire Plumber. Идея была проверена и доведена до рабочего решения в виде такого bash скрипта:

    #!/bin/bash
    IDLE_LIMIT_MS=900000  # 15 minutes
    while true; do
      idle_ms=$(xprintidle)
    #  if wpctl status | awk '/Streams:/,/Video/ {print}' | grep -B1 'playback_' | grep -q '\[active\]'; then
      if wpctl status | grep 'playback' | grep '\[active\]'; then
        echo "$(date): Audio playing, skip suspend"
        sleep 60
        continue
      fi
      if [ "$idle_ms" -gt "$IDLE_LIMIT_MS" ]; then
        echo "$(date): Idle and no audio — suspending..."
        systemctl suspend
      fi
      sleep 60
    done

    Еще понадобится xprintidle - он выводит число миллисекунд без активности пользователя. Раньше wpctl умел и видео отслеживать, но с каким-то апдейтом он то ли перестал это делать, то ли мне было лень разбираться, почему сломалось, поэтому я его закомментировал.

    Получается, каждую минуту смотрим wpctl status, если проигрывается аудио, то ждем минуту и возвращаемся в начало цикла. Если аудио нет и вывод xprintidle больше чем 15 минут, то отправляем систему в сон, иначе ждем минуту, все.

    Кладем этот скрипт, например, куда-нибудь в ~/.local/bin, добавляем в автозагрузку, да хоть в том же xfce при логине пользователя и пользуемся. Не надо ничего патчить и перекомпилировать, нет проблем с апдейтами, после окончания фильма сам уснет через 15 мин.


    1. Maccimo
      30.11.2025 20:33

      Зачем использовать и grep и awk, если всё можно сделать одним только awk?


      1. killbond
        30.11.2025 20:33

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


  1. AlexSky
    30.11.2025 20:33

    Может, я не уловил, в чем проблема, но почему просто не зайти на chrome://settings/content/idleDetection и не отключить эту опцию по умолчанию? Или это только в Chromium есть?


    1. alex0x08 Автор
      30.11.2025 20:33

      Во-первых как уже неоднократно упоминал: настройки часто слетают при обновлении,

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

      Плюс такое поведение не у одного только Хрома и отучать все приложения - рука устанет.


      1. AlexSky
        30.11.2025 20:33

        1) Поискал по тексту статьи и комментам - все упоминания про проблемы при обновлении относятся к правкам в менеджере питания XFCE. При чем тут настройки Хрома, которые ну никак не должны слетать при обновлении?

        2) Про это вообще не было разговора. Приведите пример такого сайта.

        3) Сколькими браузерами вы постоянно пользуетесь на одном компьюетере? Я не знаю ни одного человека, кто использовал бы больше одного (фронтендщики на своих сайтах не в счет). Ну и даже отключение в 10 браузерах быстрее, чем то, что описано в статье. И не слетает при обновлениях.