ACC SHELL
#!/bin/sh
#
# Script to set sata power management options
#
# Copyright (C) 2008 Holger Macht <hmacht@suse.de>
# Copyright (C) 2010 Michal Vyskocil <mvyskocilt@suse.cz> - rewrite for udisks
#
# This file is released under the GPLv2.
#
. /usr/lib/pm-utils/functions
IFACE=""
[ -z "$SATA_PM" ] && exit $NA
# Enumerate available devices
udisks_enumerate_devices() {
## Enumerate devices
dbus-send --system --print-reply \
--dest=org.freedesktop.UDisks \
/org/freedesktop/UDisks \
org.freedesktop.UDisks.EnumerateDevices
}
# Usage:
# $1 device name
# $2 property
udisks_get_property() {
if [ -z "${1}" -o -z "${2}" ]; then
return 1
fi
dbus-send --system --print-reply \
--dest=org.freedesktop.UDisks \
"${1}" \
org.freedesktop.DBus.Properties.Get \
string:`echo "${1}" | tr '/' '.'` ${2}
}
# The udisks alternative of
# hal-find-by-property --key volume.mount_point --string /
# Usage:
# $1 mount point
udisks_find_by_mount_point() {
for device in `udisks_enumerate_devices | grep 'object path' | sed 's@.*"\(.*\)"@\1@'`; do
if udisks_get_property $device string:DeviceMountPaths | grep -q "string \"${1}\""; then
echo $device
break
fi
done
}
# prefer UDisks if available
if dbus-send --system \
--dest=org.freedesktop.UDisks \
/org/freedesktop/UDisks \
org.freedesktop.DBus.Properties.Get \
string:org.freedesktop.UDisks string:DaemonVersion &> /dev/null; then
ST_DEV=`udisks_find_by_mount_point "/"`
HOST=`udisks_get_property $device string:NativePath | grep string | sed -e 's:.*"/sys/devices.*\(host.\)/target.*:\1:g'`
else
# ... else go back to the ancient HAL
# XXX: note this will be probably removed
UDI=`hal-find-by-property --key volume.mount_point --string /`
[ -z "$UDI" ] && exit $NA
ST_DEV=`hal-get-property --udi $UDI --key block.storage_device`
DEV=`hal-get-property --udi $ST_DEV --key linux.sysfs_path`
HOST=`echo $DEV | sed -e 's:/sys/devices.*\(host.\)/target.*:\1:g'`
[ -z "$HOST" ] && exit $NA
[ -e /sys/class/scsi_host/$HOST/link_power_management_policy ] || exit $NA
fi
[ -z "$HOST" ] && exit $NA
case "$1" in
true)
echo "**set power mode for sata device to $SATA_PM" ;;
false)
SATA_PM="max_performance"
echo "**set power mode for sata device to $SATA_PM"
;;
esac
echo $SATA_PM > /sys/class/scsi_host/$HOST/link_power_management_policy
ACC SHELL 2018