Package: pm-utils Version: 1.4.1-7 Severity: normal Tags: patch --- Please enter the report below this line. --- I noticed that pm-utils did not turn on wireless power management when unplugging from ac on my laptop. I investigated a bit and found out, that the power.d/wireless skript uses a "heuristic" method for finding out if a network interface is a wireless interface. The line in question is
# Skip if not a wireless card. [ -d "/sys/class/net/$1/wireless" ] || return 1 Apparently, the directory /sys/class/net/$1/wireless has gone away, or is not available on every platform at least. Therefor I think it's best to use /sys/class/ieee80211 instead. The patch below corrects the script accordingly. The new skript works fine on my box but I cannot test it on different hardware and it might need some adjustments in the final loop for other network cards since I am not sure what it means, when one ieee80211/* device has multiple ../device/net/* devices. diff --git a/wireless b/wireless index b4be69c..de70084 100755 --- a/wireless +++ b/wireless @@ -16,12 +16,10 @@ get_wireless_params() { unset iwpriv iwconfig iwlevel # Don't do anything if we cannot find a driver for this iface. - [ -L "/sys/class/net/$1/device/driver" ] || return 1 - # Skip if not a wireless card. - [ -d "/sys/class/net/$1/wireless" ] || return 1 + [ -L "/sys/class/ieee80211/$1/device/driver" ] || return 1 # Also don't do anything if the device is disabled - [ "$(cat /sys/class/net/$1/device/enable)" = "1" ] || return 1 - driver="$(readlink "/sys/class/net/$1/device/driver")" + [ "$(cat /sys/class/ieee80211/$1/device/enable)" = "1" ] || return 1 + driver="$(readlink "/sys/class/ieee80211/$1/device/driver")" driver=${driver##*/} case $driver in ipw2100) iwpriv_ac="set_power 0" @@ -31,7 +29,7 @@ get_wireless_params() { ipw3945) iwpriv_ac="set_power 6" iwpriv_batt="set_power 7";; - iwl*) if [ -f "/sys/class/net/$1/device/power_level" ]; then + iwl*) if [ -f "/sys/class/ieee80211/$1/device/power_level" ]; then iwlevel_ac=0 iwlevel_batt=3 else @@ -53,19 +51,21 @@ get_wireless_params() { } wireless_powersave() { - for dev in /sys/class/net/*; do - get_wireless_params "${dev##*/}" "$1" || continue + for phy in /sys/class/ieee80211/*; do + get_wireless_params "${phy##*/}" "$1" || continue ret=0 - printf "Turning powersave for %s %s..." "${dev##*/}" "$1" - if [ "$have_iwconfig" = true -a "$iwconfig" ]; then - iwconfig "${dev##*/}" $iwconfig || ret=1 - fi - if [ "$have_iwpriv" = true -a "$iwpriv" ]; then - iwpriv "${dev##*/}" $iwpriv || ret=1 - fi + for dev in $phy/device/net/*; do + printf "Turning powersave for %s %s..." "${dev##*/}" "$1" + if [ "$have_iwconfig" = true -a "$iwconfig" ]; then + iwconfig "${dev##*/}" $iwconfig || ret=1 + fi + if [ "$have_iwpriv" = true -a "$iwpriv" ]; then + iwpriv "${dev##*/}" $iwpriv || ret=1 + fi + done if [ "$iwlevel" ]; then - echo "$iwlevel" > "$dev/device/power_level" || ret=1 - fi + echo "$iwlevel" > "$phy/device/power_level" || ret=1 + fi [ "$ret" -eq 0 ] && echo Done. || echo Failed. done } @@ -76,4 +76,4 @@ case $1 in *) exit $NA ;; esac -exit 0 \ No newline at end of file +exit 0 --- System information. --- Architecture: amd64 Kernel: Linux 2.6.38-1-amd64 Debian Release: wheezy/sid 500 unstable www.debian-multimedia.org 500 unstable ftp.de.debian.org 500 testing ftp.de.debian.org 100 experimental-snapshots qt-kde.debian.net 1 experimental ftp.de.debian.org --- Package information. --- Depends (Version) | Installed =============================-+-=========== powermgmt-base | 1.31 kbd | OR console-tools | 1:0.2.3dbs-70 Recommends (Version) | Installed =========================-+-=========== vbetool | 1.1-2 procps | 1:3.2.8-10 hdparm | 9.32-1 Suggests (Version) | Installed =============================-+-=========== cpufrequtils | 007-1 wireless-tools | 30~pre9-5 ethtool | 1:2.6.37-1 radeontool | -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org