Добавить в корзинуПозвонить
Найти в Дзене

Clamshell: режим системного блока на Linux без кабеля питания

Утилита отключает принудительный сон ноутбука при работе от батареи.
Apple в macOS и разработчики systemd в Linux давно решили за вас: режим системного блока (clamshell mode) разрешен исключительно при подключенном кабеле питания. Закрыли крышку ноутбука, работая от батареи - устройство неминуемо уйдет в спящий режим. Даже если по HDMI или Type-C подключен огромный внешний дисплей, а на столе
Оглавление

Утилита отключает принудительный сон ноутбука
Утилита отключает принудительный сон ноутбука

Утилита отключает принудительный сон ноутбука при работе от батареи.

Apple в macOS и разработчики systemd в Linux давно решили за вас: режим системного блока (clamshell mode) разрешен исключительно при подключенном кабеле питания. Закрыли крышку ноутбука, работая от батареи - устройство неминуемо уйдет в спящий режим. Даже если по HDMI или Type-C подключен огромный внешний дисплей, а на столе лежат Bluetooth-мышь и механическая клавиатура.

Логика понятна - закрытый корпус хуже отводит тепло. Но на практике это приводит к тому, что пользователю приходится постоянно держать аккумулятор под напряжением 100%, что ускоряет его деградацию. Проблема решается на стороне пользователя, но требует неприятного вмешательства в системные файлы ОС.

Обычно линуксоиды прописывают параметр HandleLidSwitch=ignore в конфигурации systemd-logind. Это максимально топорный метод: ноутбук вообще перестает реагировать на датчик холла. Закроете крышку в кафе и бросите девайс в рюкзак - он продолжит работать, высаживая батарею и нагреваясь до критических температур. Утилита Clamshell, найденная на просторах GitHub, предлагает куда более элегантную инженерную альтернативу.

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

Как работает независимый демон

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

Интересно, что проект изначально создавался с прицелом на максимальную модульность. Он не опирается жестко на компоненты systemd, поэтому без малейших проблем заводится на легковесных системах с OpenRC. Настройки демона хранятся в простом читаемом TOML-файле, который утилита ищет сначала в локальной директории пользователя, а затем в глобальной системной папке.

Внутри конфигурации можно очень гибко настроить механику энергосбережения. Параметр suspend_mode_type по умолчанию выставлен в freeze - это программная заморозка процессов. Она стабильно функционирует почти на любом современном железе и практически мгновенно пробуждает систему. При необходимости значение меняется на классический режим S3 (suspend_to_ram) или глубокую гибернацию. Удобно, что предусмотрен параметр fallback - если выбранный режим сна не поддерживается ядром, утилита автоматически откатится к безопасному варианту.

Владельцев дискретных видеокарт от зеленых определенно порадует встроенная защита от зависаний при пробуждении. Опция nvidia_method_type изначально настроена на использование проверенного официального скрипта nvidia-sleep.sh. Да, в конфиге можно форсировать прямое обращение к системным процессам драйвера, но сам разработчик категорически не рекомендует этот путь из-за нестабильности проприетарного софта.

Сборка из исходников

Необходимость ручной компиляции - главный и весьма раздражающий недостаток этого решения. Чтобы clamshell mode linux без зарядки полноценно заработал, на машине придется разворачивать локальную среду разработки. По заявлениям автора, вам потребуются установленные пакеты xmake, cmake, ninja и компилятор gcc. Тянуть целый стек девелоперских инструментов ради утилиты весом в пару мегабайт согласится далеко не каждый обыватель.

Однако если зависимости вас не пугают, сам процесс внедрения довольно прямолинеен. Скачав исходный код, пользователи systemd просто запускают предоставленный скрипт service/systemd/install.sh, предварительно выдав ему права на исполнение. Инсталлятор автоматически создаст изолированный конфигурационный файл, который перехватит контроль над крышкой у стандартного менеджера сессий. После этого остается выполнить две системные команды:

sudo systemctl restart systemd-logind

sudo systemctl enable --now clamshell

Для адептов альтернативных систем инициализации предусмотрен отдельный батник service/openrc/install.sh. Активация службы в среде OpenRC выглядит не сложнее:

sudo rc-update add clamshell default

sudo rc-service clamshell start

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

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

Источник: Clamshell на GitHub

🔔 Подписывайтесь на «КликХак» - здесь мы препарируем технологии и возвращаем контроль над вашими устройствами в ваши руки. Никакой воды, только рабочие инструменты.