Come posso eseguire uno script quando l'alimentatore è collegato o -out?


8

Per qualche motivo, la luminosità dello schermo del mio laptop non si aggiorna quando collego o scollego l'alimentatore. Ho esaminato alcune soluzioni per quel problema, ma nessuna di queste sembrava funzionare bene. Quindi, invece di disperare e arrendermi, ho deciso di provare a trasformarlo in un'esperienza di apprendimento e vedere se non riesco a scrivere una sceneggiatura che lo faccia per me.

Ho provato a capirlo da solo, con un po 'di aiuto da Internet, ovviamente, ma sono abbastanza nuovo per bash scripting e Ubuntu in generale, quindi non sono andato lontano.

Quello che sono riuscito a capire è che posso trovare lo stato della batteria con

$ upower -i /org/freedesktop/UPower/devices/battery_BAT1 | grep -E "state"
state:     charging/discharging

a seconda che l'adattatore CA sia collegato o meno. Non so se sia utile, ma è abbastanza bello e non sapevo come usare grepprima, quindi che diavolo, l'apprendimento è divertente.

Ad ogni modo, c'è un modo un po 'pulito per farlo? Per "modo pulito" intendo solo un modo in cui uno con un'esperienza di script bash limitata potrebbe comprendere.

Una domanda simile che ho trovato che aveva una buona risposta è questa , che dice quanto segue:

Quando si collega / disconnette l'adattatore CA, gli script /etc/pm/power.dvengono richiamati con> un argomento: "true" (se si esegue a batteria) o "false" (se si esegue con l'alimentatore> adattatore).

Il problema è che non so come accedere a tale argomento all'interno di uno script. Quindi, immagino che tutto si riduce a un problema piuttosto semplice, ma ho pensato di pubblicare comunque la domanda, nel caso in cui le persone avessero soluzioni migliori.

Risposte:


5

È possibile utilizzare on_ac_powerper eseguire uno script quando l'alimentazione è accesa o spenta.

Prova quanto segue in un terminale.

$ on_ac_power
$ echo $?
0              ## Laptop on ac power

$ on_ac_power
$ echo $?
1              ## Laptop on battery (not on ac power)

Sulla base di questo puoi creare il tuo script come,

#!/bin/bash
while true
do
    if on_ac_power; then 
        do_something               ## Laptop on power
    else
        do_something_else          ## Laptop on battery
    fi
    sleep 10                       ## wait 10 sec before repeating
done

EDIT: [suggerito da KasiyA ]

cron job sarebbe un'idea migliore per eseguire lo script a intervalli regolari invece di usare un ciclo infinito.

Salva il tuo script come myscript.she inserisci il seguente contenuto,

#!/bin/bash
if on_ac_power; then 
    do_something
else
    do_something_else
fi

Rendere lo script eseguibile da un terminale, chmod +x /path/to/myscript.sh. Apri il tuo crontabas personale EDITOR=gedit crontab -ee aggiungi la seguente riga per eseguire lo script ogni minuto.

* * * * * /path/to/myscript.sh 

È una cattiva pratica avere script in esecuzione all'infinito o è qualcosa che accade regolarmente ed è integrato nel sistema? Immagino che stavo cercando una specie di innesco, ma se funziona, allora è molto meno complicato di quanto pensassi.
Jasper,

@TheQZ: Penso che 'souravc' abbia dato l'idea di base..puoi scrivere il tuo basato su questo :)
heemayl

@TheQZ Anche se funziona per sempre ma diventa attivo solo una volta ogni 10 sec (puoi aumentare il tempo di controllo) Guarda la domanda su come ripetere un comando ogni intervallo x di tempo . Altrimenti devi scrivere il tuo programma demone che è molto complicato per i principianti.
souravc,

@TheQZ Puoi usare la risposta di souravc come cron job. vedi seconda parte di questa mia risposta
αғsнιη,

2
Un modo migliore è usare la regola udev come in askubuntu.com/questions/613741/… .
Anthony Wong,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.