Как поддерживать работу сервера Ubuntu на ноутбуке с закрытой крышкой?

Вопрос или проблема

Я решил использовать свой Eee PC 1001HA в качестве домашнего сервера. Он подключён через Wi-Fi к роутеру и работает на Ubuntu Server 12.04. Всё функционирует нормально, за исключением одной раздражающей проблемы:

когда я закрываю крышку, ssh-сервер прекращает работу и, я предполагаю, wlan0 тоже.

Я проверял BIOS, но ничего не нашёл, не было опции касательно крышки. Мой wlan0 — это RaLink RT3090.

Проверил ls -lrt /var/log между закрытиями крышки, но не смог понять эти дьявольские логи. Могу поделиться ими, если нужно.

pm-powersave.log кажется обновляется между движениями крышки. Так что предполагаю, что мне нужно отключить этот “сервис энергосбережения”. Могу ли я это сделать? Мне всё равно, если сервер будет работать весь день.

Помните, что интерфейса нет, это нетбук с крышкой, и он подключён к адаптеру переменного тока.

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

Чтобы отключить переход в режим сна, мне пришлось отредактировать файл /etc/systemd/logind.conf и изменить строку:

#HandleLidSwitch=suspend

на

HandleLidSwitch=ignore

Дополнительно убедитесь, что в файле есть эта строка:

LidSwitchIgnoreInhibited=no

Затем перезапустите ОС с помощью:

sudo service systemd-logind restart

Выключить экран ноутбука при закрытии

Это сработало для меня на новой установке Ubuntu Server LTS 18.04.1.

Ответ от @user386160 отлично помог предотвратить переход моего ноутбука в режим сна. Но я обнаружил, что мой монитор оставался включённым, даже когда крышка была закрыта (т.е. вырабатывая ненужное тепло).

Вот дополнительные шаги, которые я предпринял, чтобы выключить экран ноутбука, когда экран был закрыт:

sudo apt-get install acpi-support vbetool
echo "event=button/lid.*" | sudo tee -a /etc/acpi/events/lid-button
echo "action=/etc/acpi/lid.sh" | sudo tee -a /etc/acpi/events/lid-button
sudo touch /etc/acpi/lid.sh
sudo chmod +x /etc/acpi/lid.sh
sudo nano /etc/acpi/lid.sh

Затем установите содержимое файла lid.sh следующим образом:

#!/bin/bash

grep -q close /proc/acpi/button/lid/*/state

if [ $? = 0 ]; then
    sleep 0.2 && vbetool dpms off
fi

grep -q open /proc/acpi/button/lid/*/state

if [ $? = 0 ]; then
    vbetool dpms on
fi

просто чтобы подтвердить, я пользователь 14.04 LTS Server на Dell X100e.

sudo apt-get install acpi-support
sudo vi /etc/default/acpi-support # и затем установите SUSPEND_METHODS="none"
sudo /etc/init.d/acpid restart

Сразу могу закрыть крышку, никаких проблем.

Просто постю, чтобы подтвердить решение предыдущих пользователей как единственное необходимое исправление. В данный момент нет необходимости делать что-то ещё дополнительно.

Другой подход,

для меня на Ubuntu Server 20.10, изменение logind.conf не помогло (хотя я сделал это, не тестировал это решение без этих изменений в файле), и команда

sudo systemctl mask sleep.target suspend.target hibernate.target
hybrid-sleep.target

-подход вызвал 100% загрузку процессора, но из этого manpage
https://manpages.ubuntu.com/manpages/cosmic/man5/systemd-sleep.conf.5.html
мне удалось заставить это работать (без перезагрузки или чего-то подобного), отключив сон полностью;
В /etc/systemd/sleep.conf добавьте следующие строки

AllowSuspend=no
AllowHibernation=no
AllowSuspendThenHibernate=no
AllowHybridSleep=no

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

Всё перестаёт работать, потому что…ноутбук переходит в режим сна! (режим ожидания).

Чтобы остановить это, просто отключите событие ACPI lid-button.

Отредактируйте /etc/acpi/event/lidbtn и закомментируйте последние две строки:

  # /etc/acpi/events/lidbtn
  # Вызывается, когда пользователь закрывает или открывает крышку
  event=button[ /]lid  # закомментируйте это строку с помощью #
  action=/etc/acpi/lid.sh # тоже самое здесь 

Перезагрузите систему, и это должно помочь.

Я использую 14.04 LTS на ASUS EEE.

Решение, предложенное Стефаном, не сработало для меня. Однако, этот ответ сработал.

Редактирование файла /etc/systemd/logind.conf помогло, но не только добавлением

HandleLidSwitch=ignore

Я также должен был добавить строки:

HandleLidSwitchDocked=ignore

и

LidSwitchIgnoreInhibited=no

Я думаю, что установка опции SUSPEND_METHODS="none" в /etc/default/acpi-support делает то же самое

Это сработало для меня — моя установка Ubuntu Server не имела /etc/acpi/event/lidbtn, но я установил пакет acpi-support, и он появился.

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

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

Подход, который сработал для меня, работающий на Ubuntu Server 22.04 на MacBook Pro 7,1; отредактируйте файл login.conf и используйте команду setterm в CLI. Это также помогло удостовериться, что экран и подсветка логотипа выключены.

Отредактируйте файл: /etc/systemd/logind.conf
Настройте эти два параметра:

HandleLidSwitch=ignore
HandleLidSwitchExternalPower=ignore

Также в терминале введите:
setterm --blank 1 --powerdown 2

Ответ или решение

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

Шаг 1: Редактирование конфигурационного файла logind.conf

  1. Откройте терминал и выполните следующую команду для редактирования файла конфигурации logind.conf:

    sudo nano /etc/systemd/logind.conf
  2. Найдите строки, содержащие HandleLidSwitch и HandleLidSwitchDocked, и измените их на следующее:

    HandleLidSwitch=ignore
    HandleLidSwitchDocked=ignore
    LidSwitchIgnoreInhibited=no
  3. Сохраните изменения и выйдите из редактора (в nano для этого нажмите CTRL + X, затем Y, чтобы подтвердить, и Enter для выхода).

Шаг 2: Перезапуск службы systemd-logind

Для того чтобы изменения вступили в силу, перезапустите службу systemd-logind:

sudo systemctl restart systemd-logind

Шаг 3: Удаление действий для кнопки крышки (опционально)

Если изменения в logind.conf не сработали, вы можете устранить события, связанные с кнопкой крышки.

  1. Убедитесь, что у вас установлен пакет acpi-support:

    sudo apt-get install acpi-support
  2. Отредактируйте файл события кнопки крышки:

    sudo nano /etc/acpi/events/lidbtn
  3. Закомментируйте последние две строки:

    # event=button[lid]lid
    # action=/etc/acpi/lid.sh
  4. Сохраните изменения и перезапустите службу ACPI:

    sudo /etc/init.d/acpid restart

Шаг 4: Дополнительные настройки

Для отключения экрана, когда крышка закрыта, вы можете использовать vbetool. Для этого выполните следующие действия:

  1. Установите необходимые пакеты:

    sudo apt-get install acpi-support vbetool
  2. Создайте файл скрипта:

    sudo nano /etc/acpi/lid.sh
  3. Вставьте следующий код в lid.sh:

    #!/bin/bash
    grep -q close /proc/acpi/button/lid/*/state
    if [ $? = 0 ]; then
       sleep 0.2 && vbetool dpms off
    fi
    
    grep -q open /proc/acpi/button/lid/*/state
    if [ $? = 0 ]; then
       vbetool dpms on
    fi
  4. Сделайте файл исполняемым:

    sudo chmod +x /etc/acpi/lid.sh

Шаг 5: Проверка работы

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

Эти шаги помогут вам удержать ваш сервер на Ubuntu рабочим, даже когда крышка ноутбука закрыта.

Оцените материал
Добавить комментарий

Капча загружается...