Puncte:2

Acpid nu poate executa scripturi

drapel cn

Am un laptop vechi și am instalat Ubuntu 20.04 LTS Server edition (fără GUI, doar CLI). S-a gestionat prin SSH, astfel încât afișarea sa nu este necesară. Aș dori să închid afișajul când închid capacul și să îl pornesc din nou dacă îl deschid.

Am configurat cu succes acpid pentru a gestiona afișajul.

În /etc/acpi/events Am creat un fisier:

eveniment=buton/capac.*
action=/etc/acpi/lid.sh

Scenariul:

#!/bin/sh

grep -q închis /proc/acpi/button/lid/LID/state
dacă [ $? = 0 ]
atunci
    # acțiune de închidere
    setterm --blank forță
altfel
    # acțiune deschisă
    setterm --blank poke
fi

Dacă rulez acest script manual, funcționează perfect, totuși se pare că acpi nu poate rula scriptul:

$ sudo journalctl -u acpid -f

...
04 iulie 20:03:01 server acpid[1179]: a primit evenimentul stratului de intrare „button/lid LID close”
04 iulie 20:03:01 server acpid[1179]: regula din /etc/acpi/events/lid a fost potrivită
04 iulie 20:03:01 server acpid[1353]: se execută acțiunea „/etc/acpi/lid.sh”
04 iulie 20:03:01 server acpid[1179]: acțiunea ieșită cu starea 1
04 iulie 20:03:01 server acpid[1179]: 1 regulă totală potrivită
04 iulie 20:03:01 server acpid[1179]: evenimentul stratului de intrare finalizat „button/lid LID close”
...

Eroare: acțiunea ieșită cu starea 1 (nu 0)

Dacă știu bine, codul de ieșire 1 este o problemă de permisiune (operația nu este permisă). Nu știu de ce este „nu este permis”, pentru că nu am nevoie să folosesc sudo pentru a rula acest script.

drapel hr
Aveți o resursă care spune că acest lucru ar trebui să fie posibil folosind `setterm` dintr-o acțiune acpid? Înțeleg că `setterm` trebuie să fie rulat într-un terminal. Mă întreb dacă starea de ieșire 1 este de fapt `setterm` care vă spune că nu este conectat la un terminal (sau nu recunoaște tipul terminalului), mai degrabă decât o eroare EPERM?
Puncte:0
drapel cn

Asa ca in sfarsit mi-am dat seama care era problema.

După cum a menționat Steeldriver, setterm trebuie să fie rulat într-un terminal (în fața laptopului), iar în scriptul meu nu a fost conectat la un terminal real și setterm nu putea schimba nimic.

Conform acest post, trebuie să redirecționăm ieșirea sau intrarea către/din consolă.

Așa că mi-am modificat scriptul:

#!/bin/sh

grep -q închis /proc/acpi/button/lid/LID/state
dacă [ $? = 0 ]
atunci
    # acțiune de închidere
    setterm -term linux --blank force </dev/tty1
altfel
    # acțiune deschisă
    setterm -term linux --blank poke </dev/tty1
fi

Am testat acest script și funcționează ca un farmec ;)

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.