Kirjoittaja Aihe: Hiiri herättää koneen  (Luettu 29 kertaa)

AimoE

  • Käyttäjä
  • Viestejä: 2952
    • Profiili
Hiiri herättää koneen
« : 22.02.26 - klo:19.50 »
Alkoi ärsyttää se, että hiiri herättää koneen valmiustilasta. Netistä löytyy paljon ohjeita, joissa herätys estetään tyyliin

Koodia: [Valitse]
echo disable | sudo tee /sys/bus/usb/devices/*/power/wakeup
Yritin noudattaa tätä neuvoa, mutta sain Invalid argument -virheilmoituksia. Päättelin, että kernel varmaankin suojaa sisuksiaan nykyään paremmin. Oli jo aikakin.


Päädyin tähän ratkaisuun:

Koodia: [Valitse]
#!/bin/bash

rules=/etc/udev/rules.d/90-usb-wakeup.rules
format=(
    'ACTION=="add", SUBSYSTEM=="usb", DRIVERS=="usb",'
    'ATTRS{idVendor}=="%s", ATTRS{idProduct}=="%s",'
    'ATTRS{power/wakeup}="disabled"'
)
format=${format[@]}

for file in /sys/bus/usb/devices/*/power/wakeup
do
    [[ $(cat $file) == enabled ]] || continue

    d=${file%/power/wakeup}
    printf "$format\n" $(cat $d/idVendor) $(cat $d/idProduct)

done | sudo tee -a $rules

Aiempaan verrattuna tässä on se hyvä puoli, että estosta jää jälki, jonka avulla eston voi perua; sääntötiedoston voi poistaa helposti. Sekin on hyvä puoli, että näin lyhyt koodinpätkä on helppo lukea.

Mutta tämä komentotiedosto täytyy suorittaa sokkona. Teki mieli kirjoittaa viimeinen rivi muotoon

Koodia: [Valitse]
done # | sudo tee -a $rules # uncomment for immediate effect

Tein siitä sitten interaktiivisemman version:

Koodia: [Valitse]
#!/bin/bash

rules=/etc/udev/rules.d/90-usb-wakeup.rules
format=(
    'ACTION=="add", SUBSYSTEM=="usb", DRIVERS=="usb",'
    'ATTRS{idVendor}=="%s", ATTRS{idProduct}=="%s",'
    'ATTRS{power/wakeup}="disabled"'
)
format=${format[@]}

comment(){
    for f in iManufacturer iProduct manufacturer product
    do
[[ -f $1//$f ]] && printf " $(cat $1/$f)"
    done
}
pick(){
    zenity --list --checklist \
   --title 'Estä herätys valmiustilasta' \
   --text 'Herätys on sallittu näille:' \
   --ok-label 'Jatka' --cancel-label 'Peru' \
   --column '' --column '' --column 'USB-laite' \
   --hide-column 2 --print-column 2 --separator ' ' \
   "$@" || exit # cancel button
}
advice(){
    echo "
Esto tulee voimaan kun USB-laite kytketään uudelleen.

Voit palauttaa herätyksen poistamalla estosäännöt:
    sudo rm $rules
"
}
menu=()
for file in /sys/bus/usb/devices/*/power/wakeup
do
    [[ $(cat $file) == enabled ]] || continue

    d=${file%/power/wakeup}
    menu+=( true $d "$(comment $d)" )
done
for d in $(pick ${menu[@]})
do
    echo "#$(comment $d)"
    printf "$format\n" $(cat $d/idVendor) $(cat $d/idProduct)

done | sudo tee -a $rules && advice

... ja työn touhussa totesin, että ainoa USB-laite, joka herättää koneen, on Logitech Universal Receiver, eikä siihen paritettuja laitteita voi estää yksitellen. Plääh.