мой ноутбук Dell подвержен этой ошибке с ядром 3.14. В качестве обходного пути я написал простой сценарий
/ USR / бен / Яркость-фикс:
#!/bin/bash
echo 0 > /sys/class/backlight/intel_backlight/brightnes
(и сделал исполняемый файл: chmod +x /usr/bin/brightness-fix
)
и вызывающая его служба systemd, которая выполняется при запуске:
/etc/systemd/system/brightness-fix.service
[Unit]
Description=Fixes intel backlight control with Kernel 3.14
[Service]
Type=forking
ExecStart=/usr/bin/brightness-fix
TimeoutSec=0
StandardOutput=syslog
#RemainAfterExit=yes
#SysVStartPriority=99
[Install]
WantedBy=multi-user.target
и включен: systemctl enable /etc/systemd/system/brightness-fix.service
Это работает как брелок, и я могу контролировать яркость дисплея по своему желанию. Проблема возникает, когда ноутбук возобновляет работу после перехода в спящий режим (например, при закрытии губы ноутбука): управление яркостью больше не работает, если я вручную не выполню свой первый скрипт, описанный выше:/usr/bin/brightness-fix
Как я могу создать другой сервис systemd, как мой выше, который будет выполняться во время возобновления?
РЕДАКТИРОВАТЬ:
Согласно комментариям ниже, я изменил мой, brightness-fix.service
как это:
[Unit]
Description=Fixes intel backlight control with Kernel 3.14
[Service]
Type=oneshot
ExecStart=/usr/local/bin/brightness-fix
TimeoutSec=0
StandardOutput=syslog
[Install]
WantedBy=multi-user.target sleep.target
Также я добавил echo "$1 $2" > /home/luca/br.log
в свой скрипт, чтобы проверить, действительно ли он выполняется. Сценарий, он на самом деле выполняется также в resume ( post suspend
), но он не имеет никакого эффекта (подсветка равна 100% и не может быть изменена). Я также попытался войти в систему $DISPLAY
и $USER
, во время возобновления, они пусты. Поэтому я предполагаю, что сценарий выполняется слишком рано, когда просыпается ото сна. Любой намек?
WantedBy=sleep.target
.../usr/local/bin
нет/usr/bin
. этот каталог зарезервирован только для менеджера пакетов.sleep.target
запускает устройство, когда компьютер спит, а не когда оно возобновляется. Смотрите мой ответ ниже для файла модуля, который работал для меня с подобной проблемой.Ответы:
Я знаю, что это старый вопрос, но следующий модуль работал для меня, чтобы запустить сценарий после выхода из спящего режима:
Я полагаю, что именно
After=suspend.target
это заставляет его работать на резюме, а не когда компьютер переходит в режим сна.источник
After=suspend.target
в модуле иWantedBy=multi-user.target sleep.target
в установке .В качестве альтернативы написанию и включению файла модуля вы также можете поместить скрипт оболочки (или символическую ссылку на ваш скрипт) в
/lib/systemd/system-sleep/
.Он будет вызван перед сном / спящим режимом и во время возобновления.
От
man systemd-suspend.service
:Проверьте это с этим:
источник
/usr/lib
/lib
system-sleep
каталог, кажется, находится внутри/lib/systemd/
и/usr/lib/systemd
содержит другие вещи.Продолжение ответа mivk, в котором я избегаю хакерства с новым файлом модуля (см. Мой вопрос здесь Как реагировать на события крышки ноутбука? ). Вот мое решение; это не на 100% просто ( вздох ), потому что система не стабильна, когда выходит из сна:
На моей коробке Fedora 26 я поместил символическую ссылку здесь:
/usr/lib/systemd/system-sleep/sleepyhead
что указывает здесь:/root/bin/sleepyhead
которая содержит:/root/bin/trackpoint
Скрипт следующим образом . Обратите внимание, что первый сон имеет решающее значение. Устройство настраивается каждый раз при открытии крышки, поэтому оно не существует вначале. Если я попытаюсь сделать что-либо, кроме сна, сценарию «соня» потребуется очень много времени для выхода, и мой указатель будет заморожен как минимум на 60 секунд. Кроме того, обратите внимание, что вы не можете поместить/root/bin/trackpoint
скрипт в фоновом режимеsleepyhead
выше. Если вы это сделаете, процесс будет убит приsleepyhead
выходе.источник