transserg 02.06.2011 14:47

СкриптыThinkpad x201i ACPI (функциональные кнопки, энергосбережение)

После приобретения ноутбука Thinpad x201i и установки на него gentoo встал вопрос о настройке функциональных кнопок и энергосбережения. Побродив по просторам сети были рождены 2 скрипта.
1. Скрипт "оживляющий" функциональные клавиши.

  1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/bin/bash 
# ibm/hotkey HKEY 00000080 00001002 блокирование
# ibm/hotkey HKEY 00000080 00001003 батарея
# ibm/hotkey HKEY 00000080 00001004 спящий режим
# ibm/hotkey HKEY 00000080 00001005 беспроводные интерфейсы
# ibm/hotkey HKEY 00000080 00001007 переключение монитора
# ibm/hotkey HKEY 00000080 00001008 отключение тачпада
# ibm/hotkey HKEY 00000080 00001009 отключение от док станции
# ibm/hotkey HKEY 00000080 0000100c гибернация
# ibm/hotkey HKEY 00000080 00001014 увеличение
# ibm/hotkey HKEY 00000080 00001018 thinkVantage

PKEY="$4"

export DISPLAY=:0
export XAUTHORITY="/home/serg/.Xauthority"

function Block()
{
slimlock
}

function Battery()
{
echo Battery Key pressed "$PKEY" >> /var/log/thikkey.log
}

function Suspend()
{
pm-suspend
}

function Hibernate()
{
pm-hibernate
}

function LCDOff()
{
xset dpms force off
}

function TouchpadOff()
{
TPSTATUS=`synclient -l | awk '/TouchpadOff/ {print $3}'`
#
test -z $TPSTATUS && exit 1
if [ $TPSTATUS = 0 ]; then
synclient TouchpadOff=1
sudo -u serg notify-send "Тачпад" "Отключен"
else
synclient TouchpadOff=0
sudo -u serg notify-send "Тачпад" "Включен"
fi
}

function WirelessInterface()
{
rfkill list | sed -n -e'/tpacpi_bluetooth_sw/,/^[0-9]/p' | grep -q 'Soft blocked: yes'
bluetooth_state=$?

rfkill list | sed -n -e'/phy0/,/^[0-9]/p' | grep -q 'Soft blocked: yes'
wifi_state=$?

STATE="$wifi_state""$bluetooth_state"
echo $STATE >> /var/log/thikkey.log
case "$STATE" in
00*)
rfkill unblock wifi
;;
10*)
rfkill unblock bluetooth
;;
01*)
rfkill block bluetooth
;;
11*)
rfkill block wifi
;;
esac
}

case "$PKEY" in
00001002*)
Block
;;
00001003*)
Battery
;;
00001004*)
Suspend
;;
00001005*)
WirelessInterface
;;
00001007*)
LCDOff
;;
00001008*)
TouchpadOff
;;
00001009*)
;;
0000100c*)
Hibernate
;;
00001014*)
sudo -u serg scrot '/home/serg/images/shots/%Y-%m-%d:%H:%M:%S_$wx$h_scrot.png'
sudo -u serg notify-send "Сделан новый снимок экрана"
;;
00001018*)
;;
esac



2. Отредактированный /etc/acpi/default.sh

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/bin/sh
# /etc/acpi/default.sh
# Default acpi script that takes an entry for all actions

set $*

group=${1%%/*}
action=${1#*/}
device=$2
id=$3
value=$4

log_unhandled() {
logger "ACPI event unhandled: $*"
}

case "$group" in
button)
case "$action" in
power)
/sbin/init 0
;;

# if your laptop doesnt turn on/off the display via hardware
# switch and instead just generates an acpi event, you can force
# X to turn off the display via dpms. note you will have to run
# 'xhost +local:0' so root can access the X DISPLAY.
lid)
pm-suspend
#xset dpms force off
;;

*) log_unhandled $* ;;
esac
;;

ac_adapter)
case "$value" in
# Add code here to handle when the system is unplugged
# (maybe change cpu scaling to powersave mode). For
# multicore systems, make sure you set powersave mode
# for each core!
*0)
echo "5" > /sys/class/backlight/acpi_video0/brightness
echo 1 > /sys/devices/system/cpu/sched_smt_power_savings
echo 10 > /sys/module/snd_hda_intel/parameters/power_save
echo 1 > /sys/module/usbcore/parameters/autosuspend
for i in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo powersave > $i; done
for i in /sys/class/scsi_host/host*/link_power_management_policy; do echo min_power > $i; done
for i in /sys/bus/usb/devices/*/power/autosuspend; do echo 1 > $i; done
echo 5 > /proc/sys/vm/laptop_mode
echo 90 > /proc/sys/vm/dirty_ratio
echo 60 > /proc/sys/vm/dirty_background_ratio
echo 60000 > /proc/sys/vm/dirty_writeback_centisecs
/sbin/hdparm -B 128 -S 12 /dev/sda >/dev/null
;;

*1)
echo "7" > /sys/class/backlight/acpi_video0/brightness
echo 0 > /sys/devices/system/cpu/sched_smt_power_savings
echo 0 > /sys/module/snd_hda_intel/parameters/power_save
echo 0 > /sys/module/usbcore/parameters/autosuspend
for i in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo ondemand > $i; done
for i in /sys/class/scsi_host/host*/link_power_management_policy; do echo max_performance > $i; done
for i in /sys/bus/usb/devices/*/power/autosuspend; do echo 1 > $i; done
echo 0 > /proc/sys/vm/laptop_mode
echo 10 > /proc/sys/vm/dirty_ratio
echo 5 > /proc/sys/vm/dirty_background_ratio
echo 6000 > /proc/sys/vm/dirty_writeback_centisecs
/sbin/hdparm -B 254 -S 240 /dev/sda >/dev/null
;;

*) log_unhandled $* ;;
esac
;;

*) log_unhandled $* ;;
esac




Тэги: acpi Gentoo Thinkpad x201
+ 7 -
Похожие Поделиться

shisoid 03.06.2011 12:28 #
а для wi-fi?
а для проводной сети?
а hpet?
а для usb? (i.e. echo auto > /sys/bus/usb/devices/.../power/level)
а для PCI-E?
>>>
кури
:)
transserg 03.06.2011 16:26 #
local.start


echo hpet > /sys/devices/system/clocksource/clocksource0/current_clocksource
if on_ac_power; then
echo " * Power: AC"
echo "Setting brightness to level 7"
echo "7" >/sys/class/backlight/acpi_video0/brightness
echo 0 > /sys/devices/system/cpu/sched_smt_power_savings
echo 0 > /sys/module/snd_hda_intel/parameters/power_save
for i in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo ondemand > $i; done
for i in /sys/class/scsi_host/host*/link_power_management_policy; do echo max_performance > $i; done
for i in /sys/bus/usb/devices/*/power/autosuspend; do echo 1 > $i; done
echo 0 > /proc/sys/vm/laptop_mode
echo 10 > /proc/sys/vm/dirty_ratio
echo 5 > /proc/sys/vm/dirty_background_ratio
echo 6000 > /proc/sys/vm/dirty_writeback_centisecs
/sbin/hdparm -B 254 -S 240 /dev/sda >/dev/null
else
echo " * Power: battery"
echo "4" >/sys/class/backlight/acpi_video0/brightness
echo "Setting brightness to level 4"
# echo power bat >> /var/log/bootpro.log
echo 1 > /sys/devices/system/cpu/sched_smt_power_savings
echo 10 > /sys/module/snd_hda_intel/parameters/power_save
for i in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo powersave > $i; done
for i in /sys/class/scsi_host/host*/link_power_management_policy; do echo min_power > $i; done
for i in /sys/bus/usb/devices/*/power/autosuspend; do echo 1 > $i; done
echo 5 > /proc/sys/vm/laptop_mode
echo 90 > /proc/sys/vm/dirty_ratio
echo 60 > /proc/sys/vm/dirty_background_ratio
echo 60000 > /proc/sys/vm/dirty_writeback_centisecs
/sbin/hdparm -B 128 -S 12 /dev/sda >/dev/null
fi


вот он hpet
проводных сети не трогал еще. с PCE-E не получает изменить режим. поэтому пока отложено.
shisoid 04.06.2011 16:44 #
вижу, ок
а ви-фи?
и что с PCI-E?
покажи мат
transserg 04.06.2011 18:38 #
1
2
echo powersave > /sys/module/pcie_aspm/parameters/policy 
bash: echo: ошибка записи: Операция не позволяется

а ви-фи я пока почти им не пользуюсь. как его настрою нормально тогда=)
shisoid 05.06.2011 21:49 #
1
zgrep CONFIG_PCIEASPM /proc/config.gz
transserg 05.06.2011 21:53 #
1
2
CONFIG_PCIEASPM=y
# CONFIG_PCIEASPM_DEBUG is not set

может то что его дебаг выключен?
shisoid 06.06.2011 00:54 #
хм...оооочень сильно сомневаюсь
ибо дебаг - отдельная история
полезу в ванну - гляну
shisoid 06.06.2011 02:45 #
1
2
3
4
megabaks@netbook ~ $ zgrep CONFIG_PCIEASPM /proc/config.gz
CONFIG_PCIEASPM=y
# CONFIG_PCIEASPM_DEBUG is not set
megabaks@netbook ~ $
1
2
3
megabaks@netbook ~ $ cat /sys/module/pcie_aspm/parameters/policy
default performance [powersave] 
megabaks@netbook ~ $
transserg 06.06.2011 08:02 #
1
2
cat /sys/module/pcie_aspm/parameters/policy
[default] performance powersave

вот мой вывод. но записать туда не позволяет ничего
Shtsh 03.06.2011 13:14 #
Возможно, для отключения тачпада дополнительно понадобится сделать xhost +

Очень рекомендую обратить внимание на laptop-mode-tools. Значительная часть уже сделана за нас.
transserg 03.06.2011 16:30 #
зачем? тачпад и так отключается нормально. laptop-mode-tools пощупал. но решил пока через acpi все настроить.
Shtsh 04.06.2011 14:27 #
У твоего метода главный недостаток — у тебя не будет переключаться режим, если ты вынешь/вставишь питание в суспенде или при выключенном ноуте.
transserg 04.06.2011 18:40 #
хм... надо это проверить.