Source: http://www.polslinux.it/2012/switch-batteria-cavo-e-viceversa/
Timestamp: 2013-05-21 22:54:03+00:00

Document:
Switch batteria -> cavo e viceversa! | Il Blog di Polslinux
Switch batteria -> cavo e viceversa!
17 Repliche	Il mio notebook ha dei problemi con UDev/Upower in quanto quando inserisco o tolgo il cavo il gestore alimentazione non mi riconosce questi eventi.
È un problema che ho riscontrato su Ubuntu, Debian, Gentoo ed Archlinux e quindi con svariate versione di UDev/Upower ma sono finalmente riuscito a trovare una soluzione per questo fastidioso bug Se anche voi siete afflitti da questo problema vi basterà creare uno script:
nano -w /home/$USER/SwitchBattery.sh
contenente il seguente codice (se usi YAD):
pass=$&#40;yad --class=&quot;GSu&quot; \
--title=&quot;Password&quot; \
--text=&quot;Enter '$USER' password:&quot; \
--image=&quot;dialog-password&quot; \
--entry --hide-text --separator=&quot;&quot;&#41;
if &#91; $? != 0 &#93;;then
echo $pass | sudo -S udevadm trigger --subsystem-match=power_supply &amp;&gt;/dev/null
pass=$(yad --class="GSu" \
--title="Password" \
--text="Enter '$USER' password:" \
--image="dialog-password" \
--entry --hide-text --separator="")
oppure il seguente (se usi Zenity):
pass=$&#40;zenity \
--entry --hide-text&#41;
pass=$(zenity \
--entry --hide-text)
oppure questo se non vuoi inutili ”fronzoli”:
echo &quot;Inserisci PWD:&quot;
echo "Inserisci PWD:"
Infine rendiamo eseguibile il file con:
chmod +x /home/$USER/SwitchBattery.sh
PS: su Archlinux ho dovuto modificare il file sudoers per permettere all’utente non root di eseguire quel comando. Se vi interessa basta procedere in questo modo:
E ho quindi aggiunto questa riga:
%wheel ALL=(ALL) /usr/bin/udevadm
Questo articolo è stato pubblicato in ArchLinux, Debian & Co, Ubuntu, Unix il 9 febbraio 2012 da Polslinux.	Navigazione articolo
← Secure Delete v1.10 :)
Bash Password Manager v2, nuova foto! →
17 pensieri su “Switch batteria -> cavo e viceversa!”	4javier 10 febbraio 2012 alle 12:40	Hai controllato se alla disconnessione del cavo almeno il kernel genera un evento? E se viene notificato ad Udev? Potrebbe darsi che sollevi un evento differente da quello che upower si aspetta.
Replica ↓	Polslinux Autore articolo10 febbraio 2012 alle 18:30	Mi succede questo:
DA staccato AD attaccato:
[ 1823.380506] EXT4-fs (sda1): re-mounted. Opts: user_xattr,acl,barrier=1,data=ordered,commit=0
[ 1823.409020] NMI watchdog enabled, takes one hw-pmu counter.
[ 1823.409061] NMI watchdog enabled, takes one hw-pmu counter.
[ 1823.412423] NMI watchdog enabled, takes one hw-pmu counter.
[ 1823.415792] NMI watchdog enabled, takes one hw-pmu counter.
[ 1823.511721] ehci_hcd 0000:00:1a.0: setting latency timer to 64
[ 1823.708237] ehci_hcd 0000:00:1d.0: setting latency timer to 64
[ 1825.647661] EXT4-fs (sda1): re-mounted. Opts: commit=0
DA attaccatto A staccato:
[ 1876.213007] EXT4-fs (sda1): re-mounted. Opts: commit=600
[ 1876.736399] EXT4-fs (sda1): re-mounted. Opts: user_xattr,acl,barrier=1,data=ordered,commit=60
Replica ↓	4javier 12 febbraio 2012 alle 18:29	Qualcosa viene notificato, infatti pm-utils rileva il cambiamento e modifica l’intervallo di flush coerentemente. Bisogna vedere perchè il resto non funzioni. Di preciso quale programma dovrebbe reagire alla dis/connessione del cavo? Sarebbe meglio se controllassi gli eventi sollevati da udev tramite udevadm monitor.
Replica ↓	Polslinux Autore articolo16 febbraio 2012 alle 13:26	Il programma che dovrebbe reagire sono i power-manager di gnome e kde!
Riguardo a udevadm monitor ecco l’output quando INSERISCO il cavo:
KERNEL[2895.968221] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
UDEV [2895.975357] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
KERNEL[2899.615469] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
KERNEL[2899.615980] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
UDEV [2899.621635] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
UDEV [2899.631920] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
KERNEL[2899.639475] change /devices/pci0000:00/0000:00:02.0/backlight/acpi_video0 (backlight)
KERNEL[2899.639690] change /devices/pci0000:00/0000:00:02.0/backlight/acpi_video0 (backlight)
UDEV [2899.640286] change /devices/pci0000:00/0000:00:02.0/backlight/acpi_video0 (backlight)
UDEV [2899.640425] change /devices/pci0000:00/0000:00:02.0/backlight/acpi_video0 (backlight)
e questo quando LO TOLGO:
KERNEL[2936.537698] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
UDEV [2936.540289] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
KERNEL[2936.544835] change /devices/pci0000:00/0000:00:02.0/backlight/acpi_video0 (backlight)
UDEV [2936.545142] change /devices/pci0000:00/0000:00:02.0/backlight/acpi_video0 (backlight)
KERNEL[2936.545441] change /devices/pci0000:00/0000:00:02.0/backlight/acpi_video0 (backlight)
UDEV [2936.545589] change /devices/pci0000:00/0000:00:02.0/backlight/acpi_video0 (backlight)
KERNEL[2936.545790] change /devices/pci0000:00/0000:00:02.0/backlight/acpi_video0 (backlight)
UDEV [2936.546004] change /devices/pci0000:00/0000:00:02.0/backlight/acpi_video0 (backlight)
KERNEL[2936.644102] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
KERNEL[2936.644636] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
UDEV [2936.646674] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
UDEV [2936.649198] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
KERNEL[2936.661615] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
KERNEL[2936.662168] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
UDEV [2936.664318] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
UDEV [2936.667129] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
Replica ↓	4javier 16 febbraio 2012 alle 19:37	Come vedi viene sollevato un change sul device BAT0, che è parte del sottosistema power_supply, in entrambi i casi. È esattamente ciò che fa il tuo script, non capisco perchè senza non funzioni. :/
Non capisco neppure perchè l’azione venga ripetuta così tante volte…
Potresti provare a vedere cosa risponde udevadm monitor al”esecuzione del tuo script.
Replica ↓	Polslinux Autore articolo16 febbraio 2012 alle 21:42	Già non ci capisco nulla nemmeno io…mah!
Comunque questo è quello che avviene quando avvio il mio script:
KERNEL[18933.636786] change /devices/LNXSYSTM:00/device:00/ACPI0003:00/power_supply/AC (power_supply)
UDEV [18933.638757] change /devices/LNXSYSTM:00/device:00/ACPI0003:00/power_supply/AC (power_supply)
KERNEL[18933.639434] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
UDEV [18933.642650] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
Replica ↓	4javier 17 febbraio 2012 alle 11:16	Ah…ora i conti tornano. Pensavo che il device fosse uno solo, BAT0, con due stati. Invece i device sono due, suppongo mutualmente esclusivi. Mi pare di capire quindi, che il sistema senza il tuo script gestisca solo il device riferito alla batteria, ma non quello relativo all’alimentazione di rete. Potresti postare marca e modello del tuo notebook?
Polslinux Autore articolo17 febbraio 2012 alle 11:40	Sony Vaio VPC-EH1S0E PS: grazie per il tempo che mi stai dedicando!
4javier 22 febbraio 2012 alle 17:48	Il tempo di dirlo…che mi ero dimenticato di questo post Prova a caricare il modulo ac, e poi a vedere se la dis/connessione del cavo viene notificata:
Polslinux Autore articolo22 febbraio 2012 alle 17:51	Oltre a non funzionare non mi fa funzionare nemmeno lo script! 4javier 22 febbraio 2012 alle 18:50	Cosa restituisce udevadm monitor?
Polslinux Autore articolo22 febbraio 2012 alle 18:54	Da ATTACCATO a STACCATO:
KERNEL[3422.450926] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
UDEV [3422.452872] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
KERNEL[3422.780524] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
KERNEL[3422.781284] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
UDEV [3422.784166] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
UDEV [3422.787309] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
E da STACCATO ad ATTACCATO:
KERNEL[3489.171159] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
UDEV [3489.173960] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
KERNEL[3494.391463] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
KERNEL[3494.392159] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
UDEV [3494.394138] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
UDEV [3494.397359] change /devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0 (power_supply)
Ovviamente con ac modprobbato Polslinux Autore articolo22 febbraio 2012 alle 19:22	Cioè la cosa strana è che viene visto correttamente da acpi l’evento batteria e quello ac (ovvero inseriti o meno)…solo che i power manager non si accorgono che lo stato del cavo è inserito o non inserito…e non capisco perché dato che acpi lo segnala correttamente..
4javier 22 febbraio 2012 alle 20:18	acpi segnala solo il cambiamento dell’alimentazione per ciò che concerne la batteria, ma come vedi non dice nulla riguardo al cavo (lo so che la logica vorrebbe, che o è uno o è l’altro, ma per udev non è così).
4javier 22 febbraio 2012 alle 20:19	Ho appena letto che il modulo ac dovrebbe venir caricato di default dagli initscript di arch, quindi non credo possa essere cambiato qualcosa. Provaa postare dmesg nel momento in cui s/colleghi il cavo.
Replica ↓	4javier 22 febbraio 2012 alle 20:28	prova a postare dmesg quando s/colleghi il cavo.
Replica ↓	Polslinux Autore articolo22 febbraio 2012 alle 20:41	Spostiamoci qui va http://www.archlinux.it/forum/viewtopic.php?id=13907

References: articolo10
 articolo16
 articolo16
 articolo17
 articolo22
 articolo22
 articolo22
 articolo22