Как мне внести изменения в / proc / acpi / wakeup перманент?

17

У меня была проблема с моим Ubuntu 12.04, просыпающимся сразу после перехода в режим ожидания. Я решил проблему, изменив настройки в / proc / acpi / wakeup, как было предложено в этом вопросе: Как предотвратить немедленный пробуждение от приостановки и / или гибернации? ,

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

Перед тем как приостановить:

cat /proc/acpi/wakeup
Device  S-state   Status   Sysfs node
SMB0      S4    *disabled  pci:0000:00:03.2
PBB0      S4    *disabled  pci:0000:00:09.0
HDAC      S4    *disabled  pci:0000:00:08.0
XVR0      S4    *disabled  pci:0000:00:0c.0
XVR1      S4    *disabled  
P0P5      S4    *disabled  
P0P6      S4    *disabled  pci:0000:00:15.0
GLAN      S4    *enabled   pci:0000:03:00.0
P0P7      S4    *disabled  pci:0000:00:16.0
P0P8      S4    *disabled  
P0P9      S4    *disabled  
USB0      S3    *disabled  pci:0000:00:04.0
USB2      S3    *disabled  pci:0000:00:04.1
US15      S3    *disabled  pci:0000:00:06.0
US12      S3    *disabled  pci:0000:00:06.1
PWRB      S4    *enabled   
SLPB      S4    *enabled

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

USB0      S3    *disabled  pci:0000:00:04.0
USB2      S3    *enabled   pci:0000:00:04.1
US15      S3    *disabled  pci:0000:00:06.0
US12      S3    *enabled   pci:0000:00:06.1

или

USB0      S3    *enabled   pci:0000:00:04.0
USB2      S3    *enabled   pci:0000:00:04.1
US15      S3    *enabled   pci:0000:00:06.0
US12      S3    *enabled   pci:0000:00:06.1

Есть идеи?


Благодарю за ваш ответ. К сожалению, это не решило мою проблему.

все

/sys/bus/usb/devices/usb1/power/wakeup
/sys/bus/usb/devices/usb2/power/wakeup
/sys/bus/usb/devices/usb3/power/wakeup
/sys/bus/usb/devices/usb4/power/wakeup

также как и

/sys/bus/usb/devices/3-1/power/wakeup

отключены, и ноутбук все равно просыпается сразу после сна. Единственное, на что он реагирует, это настройки в / proc / acpi / wakeup, которые постоянно меняются (сбрасываются) каждый раз, когда я выключаю / перезагружаю свой ноутбук.

Jolan
источник

Ответы:

11

Я снова столкнулся с этой проблемой на Ubuntu 12.10. Предложения от пользователя МТС, к сожалению, также не сработали для меня. Тем не менее, вы можете написать скрипт для автоматической установки свойств usb /proc/acpi/wakeupпрямо перед каждой приостановкой.

Решение основано на создании ловушки приостановки (на основе этой статьи на Archwiki ). Сохраните следующее как /usr/lib/pm-utils/sleep.d/45fixusbwakeupи убедитесь, что оно выполняется ( chmod +x /usr/lib/pm-utils/sleep.d/45fixusbwakeup).

#!/bin/bash
case $1 in
    hibernate)
            echo "Going to suspend to disk!"
            ;;
    suspend)
            echo "Fixing acpi settings."
            for usb in `cat /proc/acpi/wakeup | grep USB | cut -f1`;
            do
                    state=`cat /proc/acpi/wakeup | grep $usb | cut -f3 | cut -d' ' -f1 | tr -d '*'`
                    echo "device = $usb, state = $state"
                    if [ "$state" == "enabled" ]
                    then
                            echo $usb > /proc/acpi/wakeup
                    fi
            done
            echo "Suspending to RAM."
            ;;
    thaw)
            echo "Suspend to disk is now over!"
            ;;
    resume)
            echo "We are now resuming."
            ;;
    *)
            echo "Somebody is callin me totally wrong."
            ;;
esac

Для этого нужно изменить состояние каждого USB-устройства, которое в настоящее время включено, на отключенное. Если вы хотите изменить только определенные USB-устройства, измените цикл for в скрипте. Например изменить только USB1 и USB3 изменить

for usb in `cat /proc/acpi/wakeup | grep USB | cut -f1`;

в

for usb in 'USB1' 'USB3';

Надеюсь, это поможет кому-то еще, кто имеет такую ​​же проблему. Этот подход решил проблему для меня.

GjjvdBurg
источник
1
Благодарность! Я изменил этот сценарий, чтобы отключить пробуждение с USB-устройств на моем ноутбуке Sony Vaio: gist.github.com/rutsky/1ed8e9779f0b2941c5a6
Владимир Руцкий,
Я изменил ваш сценарий, чтобы отключить пробуждение при открытии LID (с моей точки зрения это глупая и раздражающая функция). Спасибо!
Gumkins
Этот дополнительный полезный хук работает в Ubuntu & Kubuntu, но не в Xubuntu 15.04. Интересно, почему ... :(
Reloader
1
Здесь модифицируются сценарий Владимир Руцкого для Systemd крюка сна вместо PM-утилиты: gist.github.com/kepi/9dea7aee8a59f3e7c10a
кепи
1
Если бы это можно было обновить для Ubuntu 16.04, было бы здорово. Я использовал решение отсюда: askubuntu.com/a/620555/463546 (старое решение), но в целом оно немного громоздко.
Александр Дубинский
9

Возможно, http://forum.xbmc.org/showthread.php?tid=121158 поможет?

Вот что он говорит:

Для тех, кто обновляет ядро ​​3.2 (что должно быть у каждого из-за недавнего эксплойта root), вы заметите, что ваше USB-пробуждение, вероятно, сломано. Они изменили политику пробуждения по умолчанию ( http://www.spinics.net/lists/linux-usb/msg53661.html ), поэтому вам необходимо внести пару изменений:

  • Вам больше не нужно включать пробуждение /proc/acpi/wakeup, оно включено по умолчанию
  • вам нужно включить пробуждение для USB-концентратора в дополнение к устройству в /sys/bus/usb/devices/*/power/wakeup

Итак, это:

echo USB1 > /proc/acpi/wakeup
echo enabled > /sys/bus/usb/devices/3-1/power/wakeup

становится:

echo enabled > /sys/bus/usb/devices/usb3/power/wakeup
echo enabled > /sys/bus/usb/devices/3-1/power/wakeup

Надеюсь, это спасет других от устранения этой же проблемы.

МТС
источник
2

Для Ubuntu 15+ вы должны использовать systemdвместо rc.local. Вы можете зайти в Google «Создание службы systemd» и следовать инструкциям, но учтите, что перенаправить вывод на /proc/acpi/wakeupэто сложно. Чтобы заставить его работать правильно, вы должны сделать что-то вроде:

/bin/sh -c '/bin/echo XHC > /proc/acpi/wakeup'

Пример вывода для служебного файла (например, /etc/systemd/system/suspendfix.service):

[Unit]
Description=fix to prevent system from waking immediately after suspend

[Service]
ExecStart=/bin/sh -c '/bin/echo XHC > /proc/acpi/wakeup'
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Или вот в этом суть

Дерек ДеРапс
источник