Непонятности с acpid

При загрузке ноута acpid нормально запускается, НО кусок кода из /etc/acpi/handler.sh наглым образом игнорируется.
Собсно сам кусок кода:

...
    0000006b)
	TPSTATUS=`synclient -l | grep TouchpadOff | awk '{print $3}'`
	if [ $TPSTATUS = 0 ]; then
	    synclient TouchpadOff=1
	else
	    synclient TouchpadOff=0
	fi
    ;;
...
Если сделать $ sudo /etc/rc.d/acpid restart - проблема исчезает

У кого какие мысли?

З.Ы.: Вариант с автоматическим отключением тачпада при воткнутой мыше не предлагать!!!

З.Ы.Ы.: На всяк случай весь /etc/acpid/handler.sh:

#!/bin/sh
# Default acpi script that takes an entry for all actions
# NOTE: This is a 2.6-centric script.  If you use 2.4.x, you'll have to
#       modify it to not use /sys
minspeed=`cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq`
maxspeed=`cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq`
setspeed="/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed"
set $*
case "$1" in
    button/power)
        #echo "PowerButton pressed!">/dev/tty5
        case "$2" in
            PWRF)   logger "PowerButton pressed: $2::$3" ;;
            *)      logger "ACPI action undefined: $2::$3" ;;
        esac
        ;;
    button/sleep)
        case "$2" in
            SLPB)   echo -n mem >/sys/power/state ;;
            *)      logger "ACPI action undefined: $2::$3" ;;
        esac
        ;;
    ac_adapter)
        case "$2" in
            AC)
                case "$4" in
                    00000000)
                        echo -n $minspeed >$setspeed
                        #/etc/laptop-mode/laptop-mode start
                    ;;
                    00000001)
                        echo -n $maxspeed >$setspeed
                        #/etc/laptop-mode/laptop-mode stop
                    ;;
                esac
                ;;
            *)  logger "ACPI action undefined: $2::$3" ;;
        esac
        ;;
    battery)
        case "$2" in
            BAT0)
                case "$4" in
                    00000000)   #echo "offline" >/dev/tty5
                    ;;
                    00000001)   #echo "online"  >/dev/tty5
                    ;;
                esac
                ;;
            CPU0)	
                ;;
            *)  logger "ACPI action undefined: $2::$3" ;;
        esac
        ;;
    button/lid)
        #echo "LID switched!">/dev/tty5
        ;;
    hotkey)
	case "$2" in
	    ATKD)
		case "$3" in
		    00000040)
			mpc prev
		    ;;
		    00000041)
			mpc next
		    ;;
		    00000043)
			mpc stop
		    ;;
		    00000045)
			mpc toggle
		    ;;
		    0000006b)
			TPSTATUS=`synclient -l | grep TouchpadOff | awk '{print $3}'`
			if [ $TPSTATUS = 0 ]; then
			    synclient TouchpadOff=1
			else
			    synclient TouchpadOff=0
			fi
		    ;;
		    *) logger "ACPI action undefined: $2::$3" ;;
		esac
		;;
	    *) logger "ACPI action undefined: $2::$3" ;;
	esac
	;;
    *)
        logger "ACPI group/action undefined: $2::$3"
        ;;
esac
Есть подозрение, что для работы synclient требуется, чтобы переменная DISPLAY была определена. Когда acpid стартует из системных скриптов, она, естественно, пустая. Когда ты рестартуешь acpid руками, переменная DISPLAY наследуется из твоего окружения.
eXire
Есть подозрение, что для работы synclient требуется, чтобы переменная DISPLAY была определена. Когда acpid стартует из системных скриптов, она, естественно, пустая. Когда ты рестартуешь acpid руками, переменная DISPLAY наследуется из твоего окружения.
В точку! Если сразу после старта Ctrl+Alt+F1 и там # synclient -l - получаем: Failed to connect to X Server.

Осталось совсем ничего: победить эту маленькую? неприятность. Есть у кого какие идеи? Подсобите, не стесняйтесь. :)
cac2s
eXire
Есть подозрение, что для работы synclient требуется, чтобы переменная DISPLAY была определена. Когда acpid стартует из системных скриптов, она, естественно, пустая. Когда ты рестартуешь acpid руками, переменная DISPLAY наследуется из твоего окружения.
В точку! Если сразу после старта Ctrl+Alt+F1 и там # synclient -l - получаем: Failed to connect to X Server.

Осталось совсем ничего: победить эту маленькую? неприятность. Есть у кого какие идеи? Подсобите, не стесняйтесь. :)
В /etc/acpi/handler.sh добавить в начало:
export DISPLAY=0:0
eXire
В /etc/acpi/handler.sh добавить в начало:
export DISPLAY=0:0
Попробовал добавить в скрипт export DISPLAY=“:0” - не помогло (export DISPLAY=0:0 тоже пробовал), хотя если вне иксов выполнить:
$ export DISPLAY=":0" 
$ synclient -l
- всё работает… ???
Уррррраааааа!!! Дядя Фёдор приехал!!!!!! (с)

Решение как всегда было под носом: http://wiki.archlinux.org/index.php/Acpid

Сделал следующее: добавил в начало скрипта функцию, которая позволяет получить имя пользователя, работающего сейчас в системе, + чуток подправил кусок неработающего (теперь уже работающего ;D ) кода.

В итоге:
#!/bin/sh
# Default acpi script that takes an entry for all actions
# NOTE: This is a 2.6-centric script.  If you use 2.4.x, you'll have to
#       modify it to not use /sys
minspeed=`cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq`
maxspeed=`cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq`
setspeed="/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed"
getuser ()
{
    export DISPLAY=`echo $DISPLAY | cut -c -2`
    user=`who | grep " $DISPLAY" | awk '{print $1}' | tail -n1`
    export XAUTHORITY=/home/$user/.Xauthority
    eval $1=$user
}
set $*
case "$1" in
    button/power)
        #echo "PowerButton pressed!">/dev/tty5
        case "$2" in
            PWRF)   logger "PowerButton pressed: $2::$3" ;;
            *)      logger "ACPI action undefined: $2::$3" ;;
        esac
        ;;
    button/sleep)
        case "$2" in
            SLPB)   echo -n mem >/sys/power/state ;;
            *)      logger "ACPI action undefined: $2::$3" ;;
        esac
        ;;
    ac_adapter)
        case "$2" in
            AC)
                case "$4" in
                    00000000)
                        echo -n $minspeed >$setspeed
                        #/etc/laptop-mode/laptop-mode start
                    ;;
                    00000001)
                        echo -n $maxspeed >$setspeed
                        #/etc/laptop-mode/laptop-mode stop
                    ;;
                esac
                ;;
            *)  logger "ACPI action undefined: $2::$3" ;;
        esac
        ;;
    battery)
        case "$2" in
            BAT0)
                case "$4" in
                    00000000)   #echo "offline" >/dev/tty5
                    ;;
                    00000001)   #echo "online"  >/dev/tty5
                    ;;
                esac
                ;;
            CPU0)	
                ;;
            *)  logger "ACPI action undefined: $2::$3" ;;
        esac
        ;;
    button/lid)
        #echo "LID switched!">/dev/tty5
        ;;
    hotkey)
	case "$2" in
	    ATKD)
		case "$3" in
		    00000040)
			mpc prev
		    ;;
		    00000041)
			mpc next
		    ;;
		    00000043)
			mpc stop
		    ;;
		    00000045)
			mpc toggle
		    ;;
		    0000006b)
			getuser "$user"
			TPSTATUS=`DISPLAY=:0 su $user -c "synclient -l" | grep TouchpadOff | awk '{print $3}'`
			echo $TPSTATUS > /dev/tty5
			if [ $TPSTATUS = 0 ]; then
			    DISPLAY=:0 su $user -c "synclient TouchpadOff=1"
			else
			    DISPLAY=:0 su $user -c "synclient TouchpadOff=0"
			fi
		    ;;
		    *) logger "ACPI action undefined: $2::$3" ;;
		esac
		;;
	    *) logger "ACPI action undefined: $2::$3" ;;
	esac
	;;
    *)
        logger "ACPI group/action undefined: $2::$3"
        ;;
esac
Стандартный /etc/acpi/handler.sh
#!/bin/sh
# Default acpi script that takes an entry for all actions
# NOTE: This is a 2.6-centric script.  If you use 2.4.x, you'll have to
#       modify it to not use /sys
minspeed=`cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq`
maxspeed=`cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq`
setspeed="/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed"
set $*
case "$1" in
    button/power)
        #echo "PowerButton pressed!">/dev/tty5
        case "$2" in
            PWRF)   logger "PowerButton pressed: $2" ;;
            *)      logger "ACPI action undefined: $2" ;;
        esac
        ;;
    button/sleep)
        case "$2" in
            SLPB)   echo -n mem >/sys/power/state ;;
            *)      logger "ACPI action undefined: $2" ;;
        esac
        ;;
    ac_adapter)
        case "$2" in
            AC)
                case "$4" in
                    00000000)
                        echo -n $minspeed >$setspeed
                        #/etc/laptop-mode/laptop-mode start
                    ;;
                    00000001)
                        echo -n $maxspeed >$setspeed
                        #/etc/laptop-mode/laptop-mode stop
                    ;;
                esac
                ;;
            *)  logger "ACPI action undefined: $2" ;;
        esac
        ;;
    battery)
        case "$2" in
            BAT0)
                case "$4" in
                    00000000)   #echo "offline" >/dev/tty5
                    ;;
                    00000001)   #echo "online"  >/dev/tty5
                    ;;
                esac
                ;;
            CPU0)	
                ;;
            *)  logger "ACPI action undefined: $2" ;;
        esac
        ;;
    button/lid)
        #echo "LID switched!">/dev/tty5
        ;;
    *)
        logger "ACPI group/action undefined: $1 / $2"
        ;;
esac
Кнопки ноута Mute, VolumeUp, VolumeDown по идее должны проваливаться в
logger “ACPI group/action undefined: $1 / $2”
но этого не происходит. Xev эти кнопки видит, acpi-модуль button загружен. Проверял - кнопка Power в handler.sh обрабатывается. Почему же скрипт игнорирует ноутбучные кнопки?
acpi_listen их видит?
какой ноут?
покажи $ lsmod acpi
Если их видит xev - то зачем ты прикручиваешь их обработку через acpid? Используй xbindkeys или средства своего WM|DE.
cac2s,
Acpi_listen не видит. Ноут HP Compaq nx9020.
$ lsmod | grep acpi
pata_acpi               3828  0 
libata                156908  3 ata_piix,ata_generic,pata_acpi
Muu
Если их видит xev - то зачем ты прикручиваешь их обработку через acpid?
Хочу, чтобы в консоли тоже работало.
 
Зарегистрироваться или войдите чтобы оставить сообщение.