Difference between revisions of "Linux, hacer que el botón de power (on/off) apague el computador solo si no hay nadie loggeado (Ubuntu 12.04)"
Jump to navigation
Jump to search
(2 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
[[Media:Powerbtn.sh.zip]] | Para hacer que el botón de encendido y apagado del computador lo apague al hacer click se modifica el archivo <code>/etc/acpi/powerbtn.sh</code>. Solamente se apaga si no hay nadie loggeado al sistema. | ||
Este archivo pertenece a Ubuntu Linux 12.04. | |||
El resultado es el siguiente, las líneas amarillas muestran la modificación realizada. | |||
<syntaxhighlight lang="bash" highlight="39-42" enclose="div"> | |||
#!/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 | |||
# Add next lines for power button shutdown if no user is logged | |||
if [ -z "`who`" ]; then | |||
/sbin/shutdown -h now "Power button pressed" | |||
fi | |||
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" | |||
</syntaxhighlight> | |||
[[Media:Powerbtn.sh.zip|Descargar archivo]] |
Latest revision as of 16:21, 11 July 2014
Para hacer que el botón de encendido y apagado del computador lo apague al hacer click se modifica el archivo /etc/acpi/powerbtn.sh
. Solamente se apaga si no hay nadie loggeado al sistema.
Este archivo pertenece a Ubuntu Linux 12.04.
El resultado es el siguiente, las líneas amarillas muestran la modificación realizada.
#!/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
# Add next lines for power button shutdown if no user is logged
if [ -z "`who`" ]; then
/sbin/shutdown -h now "Power button pressed"
fi
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"