Para configurar os níveis de APM do disco rígido e mantê-los após a suspensão / retomada

2

No Fedora 25, o disco rígido do meu laptop tem um nível muito baixo de APM (gerenciamento de energia), então eu uso as regras do udev de esta resposta para ajustá-lo com hdparm . No entanto, após retomar da suspensão, o nível de APM é redefinido. Acionar manualmente as regras do udev do terminal funciona, então, para automatizá-lo, tentei usar o seguinte serviço systemd adaptado de aqui e aqui : -

[Unit]
Description=Re-run udev power_supply rules after resuming from suspend
After=supend.target

[Service]
Type=oneshot
User=root
Group=root
ExecStart=+/bin/sh -c '/usr/sbin/udevadm trigger --subsystem-match="power_supply"'

[Install]
WantedBy=suspend.target

Eu também tentei combinações de multi-user.target , default.target e sleep.target na linha WantedBy= , bem como Type=simple . Nada disso funcionou, então tentei colocar um script em /etc/pm/sleep.d/ , adaptado de este . Mas isso também não funcionou (nem foi colocado em /usr/lib64/pm-utils/sleep.d/ ).

Finalmente, a página man do systemd-suspend.service diz

... scripts or binaries dropped in /usr/lib/systemd/system-sleep/ are intended for local use ... and should be considered hacks. If applications want to be notified of system suspend/hibernation and resume, there are much nicer interfaces available.

No entanto, colocar um script em /usr/lib/systemd/system-sleep/ realmente funciona; mas em qualquer caso, quais são essas "interfaces muito melhores" e como usá-las para executar o gatilho do udev (preferível) ou hdparm após retomar a suspensão? Melhor ainda, existe uma maneira de definir os níveis de APM do disco rígido para os estados de bateria e plug-in por meio de alguma configuração estática em vez das regras do udev?

Atualização - corrigida O serviço systemd está funcionando agora. Acho que usei por engano udevadm do diretório errado enquanto tentava várias combinações. Eu publiquei uma resposta esclarecendo isso. Peço desculpas por qualquer confusão causada. No entanto, ainda existe a questão de saber se existe uma maneira de fazer isso estaticamente (sem regras do udev).

    
por Saurav Sengupta 26.02.2017 / 17:10

2 respostas

2

Parece que eu usei inicialmente o udevadm do diretório errado ( /bin/udevadm ) e, em seguida, usei uma ou outra combinação errada ao testar as coisas. O programa udevadm deve ser executado a partir de /sbin (ou /usr/sbin ). O seguinte serviço systemd agora é suficiente: -

[Unit]
Description=Re-run udev power_supply rules after resuming from suspend
After=supend.target

[Service]
Type=oneshot
ExecStart=/sbin/udevadm trigger --subsystem-match=power_supply

[Install]
WantedBy=suspend.target

Peço desculpas por qualquer confusão causada.

    
por 26.02.2017 / 20:43
1

Escrevendo um serviço systemd para ser executado no currículo

Works with After=suspend.target in Unit and WantedBy=multi-user.target sleep.target in Install.

No seu caso, a segunda parte seria WantedBy=sleep.target .

Aparentemente, After=sleep.target trabalhou para uma pessoa, mas outra precisou usar After=suspend.target . Eu não tenho ideia do porquê. A interface para usar isso para executar unidades em currículo não parece ser documentada, então eu não diria que é mais legal.

    
por 26.02.2017 / 17:17