Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Herunterfahren aber "Power Off" verhindern, acpi



bony
22.04.06, 17:58
Hallo,

wie kann ich das Betriebssystem (SuSE 10.0) herunterfahren, aber verhindern, dass der Rechner ausgechaltet wird (acpi aktiviert)?

Hintergrund:
Ich würde meinen Rechner (Fujitsu-Siemens Scenic xB Desktop) gerne beim Herstellen der Stromversorgung (Zeitschaltuhr) automatisch hochfahren. Wird der Rechner jedoch über Software heruntergefahren und abgeschaltet, funktioniert das nicht. Nach Herstellen der Stromversorgung geht der Rechner automatisch in den Standby und kann dann nur über den Einschalttaster gestartet werden. Ich habe schon alle möglichen Einstellungen im BIOS (Phoenix 4.06) versucht, es brachte aber nichts das gewünschte Ergebnis.
Der Rechner fährt nach Herstellen der Stromversorgung jedoch automatisch hoch, wenn die Stromversorgung im Betrieb unterbrochen wurde. Das funktioniert auch, wenn im BIOS ACPI und "Power Off Source Software" deaktiviert wurden. Das Betriebssystem fährt also ordentlich runter und man kann den Rechner dann von Hand (bzw. durch eine Zeitschaltuhr) abschalten.
Nun würde ich aber gerne ACPI verwenden ...

Christoph

sirmoloch
22.04.06, 18:09
Falls das Einschalten immer zu einer festen Uhrzeit erfolgt, könntest du die ACPI-Wakeup-Events vom BIOS nutzen - die Option dürfte es wohl in jedem BIOS seit ~fünf Jahren geben. Den Rechner im Leerlauf anzulassen ist wohl mehr als unökonomisch. ;)

Gibts keine Einstellung für Power Failure? Auf meinem Desktop und einem alten P2 habe ich dort die Möglichkeit einzustellen, dass der Rechner entweder nach einem Stromversorgungsfehler eingeschaltet werden soll oder er im vorherigen Zustand verbleiben soll.

Um das endgültige Ausschalten zu verhindern sollte es aber auch reichen, wenn du dir das entsprechdende Init-Skript vornimmst. Das ist allerdings Distributions-abhängig.

bony
22.04.06, 18:25
Falls das Einschalten immer zu einer festen Uhrzeit erfolgt, könntest du die ACPI-Wakeup-Events vom BIOS nutzen
Das funktioniert leider nur, wenn der Rechner mit "Suspend to RAM" in den Suspend geschaltet wurde. Einmal davon abgesehen, dass "Suspend to RAM" bei mir auch Probleme macht ;-), weiß ich nicht, ob mir das so geheuer wäre, weil ich dann nicht genau weiß, was z.B. nach einem Stromausfall passiert. Außerdem wäre es mir lieber, wenn der Rechner ganz vom Netz ginge.


Den Rechner im Leerlauf anzulassen ist wohl mehr als unökonomisch. ;)

Der Rechner soll dann also nicht im Leerlauf bleiben, sondern die Stromversorgung wird durch eine Zeitschaltuhr (über Nacht) unterbrochen.


Gibts keine Einstellung für Power Failure?
Es gibt schon Einstellungen, die mir in diesem Fall aber eigentlich nicht weiterhelfen.


Um das endgültige Ausschalten zu verhindern sollte es aber auch reichen, wenn du dir das entsprechdende Init-Skript vornimmst. Das ist allerdings Distributions-abhängig.
Das hört sich für einen Noob aber schon etwas komplizierter an. ;-) Muss ich da an die /etc/inittab? Die sieht bei mir folgendermaßen aus:

# /etc/inittab
#
# Copyright (c) 1996-2002 SuSE Linux AG, Nuernberg, Germany. All rights reserved.
#
# Author: Florian La Roche, 1996
# Please send feedback to http://www.suse.de/feedback
#
# This is the main configuration file of /sbin/init, which
# is executed by the kernel on startup. It describes what
# scripts are used for the different run-levels.
#
# All scripts for runlevel changes are in /etc/init.d/.
#
# This file may be modified by SuSEconfig unless CHECK_INITTAB
# in /etc/sysconfig/suseconfig is set to "no"
#

# The default runlevel is defined here
id:3:initdefault:

# First script to be executed, if not booting in emergency (-b) mode
si::bootwait:/etc/init.d/boot

# /etc/init.d/rc takes care of runlevel handling
#
# runlevel 0 is System halt (Do not use this for initdefault!)
# runlevel 1 is Single user mode
# runlevel 2 is Local multiuser without remote network (e.g. NFS)
# runlevel 3 is Full multiuser with network
# runlevel 4 is Not used
# runlevel 5 is Full multiuser with network and xdm
# runlevel 6 is System reboot (Do not use this for initdefault!)
#
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
#l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6

# what to do in single-user mode
ls:S:wait:/etc/init.d/rc S
~~:S:respawn:/sbin/sulogin

# what to do when CTRL-ALT-DEL is pressed
ca::ctrlaltdel:/sbin/shutdown -r -t 4 now

# special keyboard request (Alt-UpArrow)
# look into the kbd-0.90 docs for this
kb::kbrequest:/bin/echo "Keyboard Request -- edit /etc/inittab to let this work."

# what to do when power fails/returns
pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
#pn::powerfail:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop

# for ARGO UPS
sh:12345:powerfail:/sbin/shutdown -h now THE POWER IS FAILING

# getty-programs for the normal runlevels
# <id>:<runlevels>:<action>:<process>
# The "id" field MUST be the same as the last
# characters of the device (after "tty").
1:2345:respawn:/sbin/mingetty --noclear tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
#
#S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt102

#
# Note: Do not use tty7 in runlevel 3, this virtual line
# is occupied by the programm xdm.
#

# This is for the package xdmsc, after installing and
# and configuration you should remove the comment character
# from the following line:
#7:3:respawn:+/etc/init.d/rx tty7


# modem getty.
# mo:235:respawn:/usr/sbin/mgetty -s 38400 modem

# fax getty (hylafax)
# mo:35:respawn:/usr/lib/fax/faxgetty /dev/modem

# vbox (voice box) getty
# I6:35:respawn:/usr/sbin/vboxgetty -d /dev/ttyI6
# I7:35:respawn:/usr/sbin/vboxgetty -d /dev/ttyI7

# end of /etc/inittab

bony
22.04.06, 18:35
Bzw. Shellscript /etc/initd/rc0.d/S20halt:

#! /bin/sh
# Copyright (c) 1996-2002 SuSE Linux AG, Nuernberg, Germany.
# All rights reserved.
#
# Author: Florian La Roche, 1996
# Werner Fink <werner@suse.de>, 1996-2001
#
# Please send feedback to http://www.suse.de/feedback
#
# /etc/init.d/halt (and symlinked to reboot)
#

. /etc/rc.status
. /etc/sysconfig/clock
. /etc/sysconfig/suseconfig

#
# Avoid being interrupted by child or keyboard
#
trap "echo" SIGINT SIGSEGV SIGQUIT SIGTERM
set +e

case "$0" in
*halt)
message="The system will be halted immediately."
case `/bin/uname -m` in
i?86)
command="halt"
if test -e /proc/apm -o -e /proc/acpi -o -e /proc/sys/acpi ; then
command="halt -p"
else
read cmdline < /proc/cmdline
case "$cmdline" in
*apm=smp-power-off*|*apm=power-off*) command="halt -p" ;;
esac
fi
;;
*)
command="halt -p"
;;
esac
;;
*reboot)
message="Please stand by while rebooting the system..."
command="reboot"
;;
*)
echo "$0: call me as \"halt\" or \"reboot\" please!"
exit 1
;;
esac

#
# first do local stuff
#
rc_reset
test -e /etc/init.d/halt.local && {
echo Running /etc/init.d/halt.local
/bin/sh /etc/init.d/halt.local
rc_status -v1 -r
}

# Write to wtmp file before unmounting /var
$command -w

# Set a flag that we had success upto this point
> /success

# Stop blogd before umounting /var
test -x /sbin/blogd && killproc -QUIT /sbin/blogd

echo "Sending all processes the TERM signal..."
killall5 -15
echo -e "$rc_done_up"

sleep 1
test "$1" = "fast" -o -e /fastboot || sleep 4

echo "Sending all processes the KILL signal..."
killall5 -9
echo -e "$rc_done_up"

# Redirect our mesages to default console
test -n "$REDIRECT" && exec 0<> $REDIRECT 1>&0 2>&0

#
# call modules in boot.d via K* symlinks
# (reverse sequence)
#

if test -d /etc/init.d/boot.d/ ; then
for i in /etc/init.d/boot.d/K*; do
test -f $i || continue
if test -x "$i" ; then
# Active boot scripts, should have their own messages
$i stop
else
# Old boot scripts, may not have any message
echo Skipping $i, not executable
fi
done
fi

# kill splash animation
test "$SPLASH" = yes && /sbin/splash -q

umount -anvt proc

# on umsdos fs this would lead to an error message, so direct errors to
# /dev/null
mount -no remount,ro / 2> /dev/null
sync

# show "the system is down" message
if test "$SPLASH" = yes ; then
mount -nt proc proc /proc
/sbin/splash -q -p 65535 -t "isdown"
umount -n /proc
fi

# Make reboot noise and wait a few seconds to give harddisks the chance
# to really flush their buffers before power goes down.
if test -n "$REDIRECT" ; then
sleep 1
case "$HALT_SOUND" in
"yes"|"quint")
echo -en "\033[10;393]\a\033[10;262]"
sleep 1
;;
"octave")
for tone in 524 491 440 393 349 328 295 ; do
echo -en "\033[10;${tone}]\a"
usleep 125000
done
echo -en "\033[10;262]"
;;
"no")
;;
*)
echo -en "\033[10;440]\a"
usleep 250000
;;
esac
else
test "$HALT_SOUND" = "no" || echo -en "\a"
sleep 2
fi
echo $message
test "$HALT_SOUND" = "no" || echo -en "\a"

# Set system console back to intial value
test -n "$REDIRECT" -a -n "$CONSOLE" && setconsole $REDIRECT < $CONSOLE

# Now talk to kernel
exec $command -d -f


Sind die Zeilen ab
case "$0" in
*halt)
die interessanten? Wie ändere ich die am besten? Bei "halt -p" einfach das "-p" weglassen?

sirmoloch
22.04.06, 19:00
Das funktioniert leider nur, wenn der Rechner mit "Suspend to RAM" in den Suspend geschaltet wurde. Einmal davon abgesehen, dass "Suspend to RAM" bei mir auch Probleme macht ;-), weiß ich nicht, ob mir das so geheuer wäre, weil ich dann nicht genau weiß, was z.B. nach einem Stromausfall passiert. Außerdem wäre es mir lieber, wenn der Rechner ganz vom Netz ginge.

Meinst du das generell so? Dann kann ich dich zum Glück enttäuschen: Bei mir ist es nicht so und bei einigen anderen Rechnern, die ich kenne, ebenfalls nicht. Es wird ganz normal gebootet. Bei meinem HP-Board konnte ich zusätzlich noch auswählen, dass der Rechner vom Netz booten soll.


Der Rechner soll dann also nicht im Leerlauf bleiben, sondern die Stromversorgung wird durch eine Zeitschaltuhr (über Nacht) unterbrochen.

Ah, jetzt verstehe ich. ;) Genau dafür ist das ACPI-Wakeup des BIOS eigentlich gedacht. Hast du mal in dein BIOS-Handbuch gesehen und nachgeschaut, ob das mit dem normalen Booten bei deinem BIOS eventuell von irgendwelchen Optionen abhängt?

Ich denke, dass wir den Rest mit der inittab (Die ist nicht ganz de rrichtige Anlaufpunkt. ;) Eine Datei wie /etc/rc0.d/S02kill wäre es gewesen) erstmal ignorieren können. Sinnvoller wäre es wohl erstmal etwas über das ACPI-WakeUp und dein BIOS herauszufinden.

bony
22.04.06, 21:05
Das Bios Handbuch (http://www.phoenix.com/NR/rdonlyres/5AF5C50D-9E06-4298-9E58-E52BFFCC8D7D/0/userman.pdf) gibt leider nicht viel her (zumindest nicht mir). Auch unter den anderen Dokumenten (http://www.phoenix.com/en/Customer+Services/White+Papers-Specs/Platform+System+Software+Documents/default.htm) auf der BIOS-Hersteller Seite konnte ich nichts näheres finden. Auch die Betriebsanleitung des Rechners (http://manuals.fujitsu-siemens.com/pcdocs/a26361-k520-z200-de.pdf) und des Mainboards (http://manuals.fujitsu-siemens.com/peridocs/sysboard/a26361-d1107-z120-de.pdf) geben nicht viel her.

Die Timer-Funktionen habe ich nochmals ausprobiert, funktionieren aber nicht.

Im Bios habe ich folgende Einstellungen:
Advanced --> Advanced System Configuration --> ACPI [enabled]
Advanced --> Power On/Off --> Power Off Source --> Sofware [enabled]
Advanced --> Power On/Off --> Power On Source --> Timer [On]
Power --> APM [enabled]
Power --> Power Management Mode [Customized]
Power --> Standby Timeout [disabled]
Power --> Suspend Timeout [disabled]
Power --> Suspend Mode [suspend]
Power --> Hard Disk Timeout [15 min]
Power --> Resume On Time [On]
Power --> Resume Time [hh:mm:ss]

Zur "Resume On Time" Option gibt es folgenden Erklärung:
Turning this feature on, will wake the system up from Suspend Mode at a specific time. The Resume On Time feature will not work if Suspend Mode is set to 'save to disk'.

MAIN --> Boot Options --> Post Errors [No halt on any errors]
Advanced --> System Management --> SM Error Halt [disabled]

Ich habe keine Idee mehr, wo man noch andere "wake up" Einstellungen finden soll.
Am Ende ist es vielleicht doch das einfachste, wenn ich in /etc/init.d/halt das p-Flag entferne?


P.S.:
Das Enterfernen der -p-Option in der /etc/init.d/halt bringt schon mal das eigentlich gewünschte Ergebnis. Alternativen fände ich trotzdem interessant.
Besten Dank für die Hilfe soweit!