Кнопка питания ноутбука не работает

У меня есть (на первый взгляд довольно экзотический) ноутбук Dell Latitude XT2 под управлением Lubuntu 12.04, только что установленный. Попытка заставить кнопку питания работать должным образом (открытие диалогового окна выхода из системы lubuntu-logout), но безуспешно: кнопка питания не делает ничего, кроме принудительного отключения при длительном нажатии.

Сама кнопка питания обнаружена и работает. В xfce4-power-manager-settings, когда я устанавливаю действие кнопки питания с «Ask» (= open lubuntu-logout) на «Shutdown», ноутбук успешно выключается; нажатие кнопки питания распознается и обрабатывается правильно.

Редактировать: я удалил кучу информации из вопроса, так как она, похоже, не связана с проблемой.

3
задан 27 September 2012 в 18:40

2 ответа

Установите acpi и acpi-support, если они еще не установлены.

  • Перейти к /etc/acpi/events.
  • Должен быть файл с именем powerbtn (если нет, создайте его). Содержимое файла в моей установке:
# /etc/acpi/events/powerbtn
# This is called when the user presses the power button and calls
# /etc/acpi/powerbtn.sh for further processing.

# Optionally you can specify the placeholder %e. It will pass
# through the whole kernel event message to the program you've
# specified.

# We need to react on "button power.*" and "button/power.*" because
# of kernel changes.

event=button[ /]power
action=/etc/acpi/powerbtn.sh
  • Вы можете связать действие с кнопкой питания, отредактировав переменную action в этом файле.
  • В моей установке содержание /etc/acpi/powerbtn.sh:
#!/bin/sh
# /etc/acpi/powerbtn.sh
# Initiates a shutdown when the power putton has been
# pressed.

[ -r /usr/share/acpi-support/power-funcs ] && . /usr/share/acpi-support/power-funcs

# getXuser gets the X user belonging to the display in $displaynum.
# If you want the foreground X user, use getXconsole!
getXuser() {
        user=`pinky -fw | awk '{ if ($2 == ":'$displaynum'" || $(NF) == ":'$displaynum'" ) { print $1; exit; } }'`
        if [ x"$user" = x"" ]; then
                startx=`pgrep -n startx`
                if [ x"$startx" != x"" ]; then
                        user=`ps -o user --no-headers $startx`
                fi
        fi
        if [ x"$user" != x"" ]; then
                userhome=`getent passwd $user | cut -d: -f6`
                export XAUTHORITY=$userhome/.Xauthority
        else
                export XAUTHORITY=""
        fi
        export XUSER=$user
}

# Skip if we just in the middle of resuming.
test -f /var/lock/acpisleep && exit 0

# If the current X console user is running a power management daemon that
# handles suspend/resume requests, let them handle policy This is effectively
# the same as 'acpi-support's '/usr/share/acpi-support/policy-funcs' file.

[ -r /usr/share/acpi-support/power-funcs ] && getXconsole
PMS="gnome-settings-daemon kpowersave xfce4-power-manager"
PMS="$PMS guidance-power-manager.py dalston-power-applet"

if pidof x $PMS > /dev/null; then
        exit
elif test "$XUSER" != "" && pidof dcopserver > /dev/null && test -x /usr/bin/dcop && /usr/bin/dcop --user $XUSER kded kded loadedModules | grep -q klaptopdaemon; then
        exit
elif test "$XUSER" != "" && test -x /usr/bin/qdbus; then
        kded4pid=$(pgrep -n -u $XUSER kded4)
        if test "$kded4pid" != ""; then
                dbusaddr=$(su - $XUSER -c "grep -z DBUS_SESSION_BUS_ADDRESS /proc/$kded4pid/environ")
                if test "$dbusaddr" != "" && su - $XUSER -c "export $dbusaddr; qdbus org.kde.kded" | grep -q powerdevil; then
                        exit
                fi
        fi
fi

# If all else failed, just initiate a plain shutdown.
/sbin/shutdown -h now "Power button pressed"
0
ответ дан 27 September 2012 в 18:40

Кажется, это известная ошибка в Lubuntu. В xfce4-power-manager-settings есть несколько действий для нажатия кнопки питания. Когда вы выбираете «Завершение работы», оно работает как положено, но когда вы выбираете «Спросить», ничего не происходит.

Обходной путь есть в комментарии № 10 . Меня устраивает. Кажется, между xfce4 и LXDE есть основная проблема.

Вы можете создать такое же поведение с (дополнительным) демоном acpi, как сказал green7. Версия в его ответе закрывает ПК без диалога, но мы обсуждали в чате, что вы можете запустить lubuntu-logout из сценария вместо простого выключения компьютера. Это требует некоторой работы, поскольку вы должны запустить приложение выхода из системы как пользователь, которому разрешено подключаться к X, и предоставить необходимые переменные среды (например, $DISPLAY). Поскольку переменные env различаются в разных дистрибутивах, я думаю, что вам пришлось тщательно их искать для LXDE.

0
ответ дан 27 September 2012 в 18:40

Другие вопросы по тегам:

Похожие вопросы: