mój laptop Dell jest objęty tym błędem w jądrze 3.14. Aby obejść ten problem, napisałem prosty skrypt
/ usr / bin /arity-fix:
#!/bin/bash
echo 0 > /sys/class/backlight/intel_backlight/brightnes
(i doprowadzany do stanu wykonalności: chmod +x /usr/bin/brightness-fix
)
oraz usługę systemową wywołującą ją, która jest wykonywana podczas uruchamiania:
/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
i włączone: systemctl enable /etc/systemd/system/brightness-fix.service
Działa to jak urok i mogę kontrolować jasność wyświetlacza według potrzeb. Problem pojawia się, gdy laptop wznawia się po przejściu w tryb uśpienia (np. Po zamknięciu wargi laptopa): kontrola jasności nie działa, chyba że ręcznie wykonam powyższy skrypt fisrt:/usr/bin/brightness-fix
Jak mogę utworzyć inną usługę systemową, taką jak moja powyżej, która będzie wykonywana w czasie wznawiania?
EDYCJA:
Zgodnie z poniższymi komentarzami zmodyfikowałem mój brightness-fix.service
tak:
[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
dodałem również echo "$1 $2" > /home/luca/br.log
do mojego skryptu, aby sprawdzić, czy jest on faktycznie wykonany. Skrypt jest faktycznie wykonywany również przy resume ( post suspend
), ale nie ma żadnego efektu (podświetlany jest w 100% i nie można go zmienić). Próbowałem także rejestrować, $DISPLAY
a $USER
po wznowieniu są one puste. Domyślam się, że skrypt jest uruchamiany zbyt wcześnie, gdy budzi się ze snu. Jakaś wskazówka?
WantedBy=sleep.target
.../usr/local/bin
, nie jest/usr/bin
. ten katalog jest zarezerwowany tylko dla menedżera pakietów.sleep.target
spowoduje uruchomienie urządzenia, gdy komputer śpi, a nie po wznowieniu. Zobacz moją odpowiedź poniżej, aby znaleźć plik jednostki, który pracował dla mnie z podobnym problemem.Odpowiedzi:
Wiem, że to stare pytanie, ale następujący plik jednostki działał dla mnie, aby uruchomić skrypt po wznowieniu ze stanu uśpienia:
Wierzę, że to
After=suspend.target
właśnie sprawia, że działa on przy wznowieniu, a nie kiedy komputer idzie spać.źródło
After=suspend.target
w bloku iWantedBy=multi-user.target sleep.target
na Install .Alternatywnie do pisania i włączania pliku jednostkowego możesz również umieścić skrypt powłoki (lub dowiązanie symboliczne do skryptu)
/lib/systemd/system-sleep/
.Zostanie wywołany przed snem / hibernacją oraz w czasie wznawiania.
Od
man systemd-suspend.service
:Przetestuj to za pomocą:
źródło
/usr/lib
/lib
system-sleep
katalog wydaje się być w środku/lib/systemd/
i/usr/lib/systemd
zawiera inne rzeczy.Kontynuacja odpowiedzi mivka, w której unikam muckingu z nowym plikiem jednostkowym (patrz moje pytanie tutaj Jak reagować na zdarzenia związane z pokrywą laptopa? ). Oto moje rozwiązanie; nie jest to w 100% proste ( westchnienie ), ponieważ system nie jest stabilny, gdy wychodzi ze snu:
Na moim pudełku Fedory 26 umieściłem tutaj link symboliczny:
/usr/lib/systemd/system-sleep/sleepyhead
który wskazuje tutaj:/root/bin/sleepyhead
który zawiera:Poniższy
/root/bin/trackpoint
skrypt. Zauważ, że pierwszy sen jest krytyczny. Urządzenie jest konfigurowane przy każdym otwarciu pokrywy, więc na początku nie istnieje. Jeśli spróbuję zrobić coś innego niż sen, skrypt „sleepyhead” zajmie naprawdę dużo czasu, a mój wskaźnik zostanie zamrożony na co najmniej 60 sekund. Ponadto zauważ, że nie możesz umieścić/root/bin/trackpoint
skryptu w tlesleepyhead
powyżej. Jeśli to zrobisz, proces zostanie zabity posleepyhead
wyjściu.źródło