LINUX.ORG.RU

Игнорируется нажатие кнопки выключения на системном блоке.


0

1

Вот такая ситуация. Десктопный комп, OpenSUSE 12.3. Если система загружена «с нуля», она игнорирует нажатие кнопки «Power» на системном блоки (на кнопку на клаве реагирует). Интересно, что если систему отправить в гибернейт, а потом «разбудить», то кнопка «Power» вдруг «обнаруживается». В /etc/systemd/logind.conf всё по дефолту (т. е. закомментировано).

Хотелось бы сделать так, чтобы система начала реагировать на эту самую кнопку (опыт показывает, что это иногда выручает - позволяет корректно перезагрузиться при «зависаниях», когда система перестает реагировать на клаву и мышь). Куда копать, не подскажете?

У вас запущен демон acpid ?

kostik87 ★★★★★ ()
Ответ на: комментарий от kostik87

Как я понимаю, да. В Yast он выводится как работающий, из командной строки - тоже:

linux-xm15:/home/pasha # systemctl status acpid.service
acpid.service - ACPI Event Daemon
Loaded: loaded (/usr/lib/systemd/system/acpid.service; enabled)
Active: active (running) since Sun, 2013-04-28 19:51:07 MSK; 21min ago
Main PID: 1174 (acpid)
CGroup: name=systemd:/system/acpid.service
└ 1174 /usr/sbin/acpid -n -f

Apr 28 19:51:08 linux-xm15.site acpid[1174]: starting up with netlink and the input layer
Apr 28 19:51:08 linux-xm15.site acpid[1174]: 2 rules loaded
Apr 28 19:51:08 linux-xm15.site acpid[1174]: waiting for events: event logging is off
Apr 28 19:51:12 linux-xm15.site acpid[1174]: client connected from 1541[0:0]
Apr 28 19:51:12 linux-xm15.site acpid[1174]: 1 client rule loaded
Apr 28 19:51:15 linux-xm15.site acpid[1174]: client connected from 1541[0:0]
Apr 28 19:51:15 linux-xm15.site acpid[1174]: 1 client rule loaded

PVOzerski ★★★ ()
Ответ на: комментарий от kostik87

Интересно, что acpi_listen нажатие кнопки Power на корпусе в 1-м случае (т.е. не после гибернейта, а после обычной загрузки) тоже не отлавливает...

PVOzerski ★★★ ()

zgrep ACPI_BUTTON /proc/config.gz

Deleted ()

zgrep ACPI_BUTTON /proc/config.gz

А после, если «м»:

modprobe -v button

anonymous ()
Ответ на: комментарий от anonymous

А после, если «м»:

действительно, m

modprobe -v button

Сделал - толку никакого.

Кстати, по мнению публики, все-таки где глюк: в ядре, в systemd, где-то еще?

PVOzerski ★★★ ()
Ответ на: комментарий от smilessss

/proc/bus/input/devices пустой

В /etc/acpi есть только подкаталог events, а в нем 2 файла - power_button и thinkpad.

Содержимое /etc/acpi/events/power_button:

# care about the power button

event=button/power.*
action=/usr/lib/acpid/power_button

Соответственно, содержимое скрипта /usr/lib/acpid/power_button:

#!/bin/bash
#
# check if a X session is running and active.
# If not, shut down the system
#
# Copyright (C) 2008 Holger Macht <hmacht@suse.de>
#
# This file is released under the GPLv2.
#

EXEC=«/sbin/shutdown -h now»

# check if we have pm-profiler and an active profile. If so, $EXEC can be
# overwritten by the active profile's configuration
. /etc/pm-profiler.conf > /dev/null 2>&1
if [ «$?» = «0» ]; then
. /etc/pm-profiler/$PM_PROFILER_PROFILE/config >/dev/null 2>&1
fi
[ -z «$POWER_BUTTON_HOOK» ] || EXEC=«$POWER_BUTTON_HOOK»


# iterate over all sessions. If a active X session is found, do nothing
while read A; do
SESSION=`echo $A | sed 's/\(Session[0-9]*\)://g'`
[ -z «$SESSION» ] || continue

SESSION=`echo $A | sed 's/\(Session[0-9]*\):/\1/g'`
IS_X=`dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit \
/org/freedesktop/ConsoleKit/$SESSION \
org.freedesktop.ConsoleKit.Session.GetX11Display`

# check if this is a X session, if not, go on
DISP=`echo $IS_X | sed -e 's/^.* string «\(.*\)»/\1/'`
[ -n «$DISP» ] || continue

IS_ACTIVE=`dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit \
/org/freedesktop/ConsoleKit/$SESSION \
org.freedesktop.ConsoleKit.Session.IsActive`
IS_ACTIVE=`echo $IS_ACTIVE | sed -e 's/^.* boolean \(.*\)$/\1/'`

# debug
#if [ «$IS_ACTIVE» = «true» ]; then
# echo «and is active»
#else
# echo «and is not active»
#fi

if [ «$IS_ACTIVE» = «true» -a -n «$DISP» ]; then
# additional check, if none of these two apps are running, go on
if [ -n «`pidof kpowersave`» -o -n «`pidof gnome-power-manager`» -o -n «`pidof kded4`» -o -n «`pidof dalston-power-applet`» -o -n «`pidof gnome-settings-daemon`» ]; then
echo doing nothing...
exit 0
fi
fi
done < <(ck-list-sessions)

logger -s -t pm-profiler «Power Button pressed, executing $EXEC»
$EXEC

PVOzerski ★★★ ()
Ответ на: комментарий от PVOzerski

/proc/bus/input/devices пустой

Хм, не знаю. Может ACPI бажный, материнка не сильно старая?

В /etc/acpi есть только подкаталог events, а в нем 2 файла - power_button и thinkpad.
Содержимое /etc/acpi/events/power_button:

Тут OK, спасибо.

varchar ()
Ответ на: комментарий от varchar

Но разница с тем, что у меня есть:

/etc/acpi/:
actions  default.sh  events

/etc/acpi/actions:
powerbtn.sh

/etc/acpi/events:
default

varchar ()
Ответ на: комментарий от varchar

Интересно, а что в powerbtn.sh? Кстати, какой это дистр?

К слову, когда у меня стояла OpenSUSE 11.4, кнопочка работала. Там, кстати, sysvinit был, а не systemd, как теперь.

И еще: несколько часов назад я сменил ядро (3.7.10-1.1) с -default на -desktop. Проблема с кнопкой осталась в прежнем виде, никуда не делась.

PVOzerski ★★★ ()
Последнее исправление: PVOzerski (всего исправлений: 1)
Ответ на: комментарий от PVOzerski

3.7.10

уже 3.9 есть
видимо systemd что-то криво завело и на твою кнопку не повесился event
можно самому забиндить на pwr button действие

smilessss ★★★★★ ()
Ответ на: комментарий от PVOzerski

Дистр — гента. powerbtn.sh. Кажется я его где-то брал и туда клал, наверно из генту-вики, не помню. По назначению он для того же, что и твой /etc/acpi/events/power_button, вызывается чуть по другому, но не суть, у тебя почему-то ивента для экшена на происходит. Подозреваю баг в реализации ACPI железом.

varchar ()

После очередного обновления (затронувшего, в том числе, ядро и systemd) ситуация, вроде бы, нормализовалась...

PVOzerski ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.