[LUG.ro] Apagar la compu
J. Mario Oroz
lugro@lugro.org.ar
Fri, 8 Aug 2003 18:13:56 -0300
Disculpas por el mail anterior.
Aqui esta lo que lo que queria comartir con ud.:
================================
SO: GNU/linux
Distro: RH6.2 RH8; con kernel oficial de la distro.
Espero que le sea de utilidad a alguin.
Que quiero hacer?
Tener un server ppp y aún poder conectarse a internet
con un solo modem/linea. Tareas mutuamente excluyentes; no?.
teniendo corriendo ya el mgetty desde el /etc/inittab; lo que
debemos hacer es:
Modificamos automaticamente el /etc/inittab:
Buscamos la linea que ejecuta el mgetty y la comentariamos.
como root: (y haciendo un backup de tu inittab; # cp inittab inittab.bak)
# sed s/^S2/#S2/ /etc/inittab > /etc/inittab.mod
# cp -f /etc/inittab.mod inittab; rm -f /etc/inittab.mod
Se pide a init que se reinicie y lea nuebamente /etc/inittab
# init q (o # telinit q)
Elimino el proceso mgetty que se encuentra corriendo
# kill -9 `cat /var/run/mgetty.pid.ttyS2`
y puede lanzarse el comando para conectarse a internet:
# ifup ppp0
Para volver atras todo lo tocado:
Solo se debe descomentar la linea del inittab que hace referencia a mgetty
y reiniciar init.
modificamos nuevamente el /etc/inittab:
Buscamos la linea comentada de mgetty y eliminamos el caracter "#".
como root:
# sed s/^#S2/S2/ /etc/inittab > /etc/inittab.mod
# cp -f /etc/inittab.mod inittab; rm -f /etc/inittab.mod
Se pide a init que se reinicie y lea nuebamente /etc/inittab
# init q (o # telinit q)
Y queda nuevamente mi modem en escucha de conecciones ppp.
En forma de script seria algo así:
Nota: este super script no controla si existe el servicio
que esta dando mgetty.
Supone que lo tenes configurado; es decir figura en inittab
y hay un proceso en escuha corriendo.
script: swt-ppp.1
------------------------------------------------------------
#!/bin/sh
if [ -f /var/run/mgetty-pid.ttyS2 ]
then
echo -n "Deshabilitando Server PPP ... "
# Comentamos
sed s/^S2/\#S2/ /etc/inittab > /etc/inittab.mod && echo "OK!" || echo
"ERROR
estado=0
else
echo -n "Habilitando Server PPP ... "
# Descomentamos
sed s/^\#S2/S2/ /etc/inittab > /etc/inittab.mod && echo "OK!" || echo
"ERROR
estado=1
fi
cp -f /etc/inittab.mod /etc/inittab
rm -f /etc/inittab.mod
telinit q
[ $estado -eq 0 ] && rm -f /var/run/mgetty-pid.ttyS2
-----------------------------------------------------------
============================================================
============================================================
Uasando las acciones de inittab "kbrequest" y "ondemand"
--- Accion: kbrequest ---
script: swt-ppp.2
------------------------------------------------------------
#!/bin/sh
if [ -f /var/run/mgetty.pid.ttyS2 ]
then
echo -n "Deshabilitando Server PPP. "
telinit q && kill -9 `cat /var/run/mgetty.pid.ttyS2` && echo "OK!" || echo
"ERROR!"
else
echo -n "Habilitando Server PPP. "
/sbin/mgetty -x5 -D ttyS2 && echo "OK!" || echo "ERROR!"
fi
------------------------------------------------------------
editamos /etc/inittab y agregamos esta linea:
cb::kbrequest:/usr/bin/swt-ppp.2
editamos /lib/kbd/keymaps/i386/qwerty/es.map.gz y
en alguna de las letras definidas y agregamos la linea
que se describe con un asterisco (*):
keycode 52 = period colon
alt keycode 52 = Meta_period
shift alt keycode 52 = Meta_greater
control alt keycode 52 = KeyboardSignal (*)
Entomces al oprimir las teclas "Ctrl + Alt + ." (control + alt + punto)
se ejecuta el proceso definido en inittab para la accion "kbrequest"
El mecanismo funciona; al oprimir dicha convinacion se ejecuta el proceso
que describo en /etc/inittab.
Resultado:
No funciono bien el script swt-ppp.2, de hecho no llevo a cabo el
echo de que si se muere dicho proceso otro tiene que
largarse desde inittab (accion "respawn") puesto que el proceso
padre del mgetty es el script y no init.
En cambio esta linea si funciona perfectamente.
#Para apagar la compu con "ctrl + alt + ."
cb::kbrequest:/usr/bin/shutdown -h now
OBSERVACION:
Como proceso use un " echo 'Hola Mundo' " y al ejecutarse no retorna a la
linea de comandos; sino se queda en el retorno de carro del "echo" ...
tipie un comando, di enter y lo ejecuto; esta combinacion funciona
si sos root como si no lo sos. Prove comandos que solo pueden ser usados
por root desde otro usuario NO PRIVILEGIADO y las restricciones se aplicaron
bien; no me dejo cambiar el passwd del root. Pero el echo es que deja
ejecutar
comandos.
--- Accion: ondemand ---
El proceso se ejecuta cuando se da la orden "telinit letra"
donde "letra" debe ser una de estas "a|b|c"; es decir la que
hallamos definido en el /etc/inittab con la accion "ondemand".
editamos /etc/inittab y agregamos esta linea:
cb:a:ondemand:/sbin/mgetty -x5 -D ttyS2
se activa con:
# telinit a
Telinit se ejecuta con un usuario que tenga los privilejios necesarios.
En realidad no se switchea a ningun runlrvel en especial es decir no existe
tal cambio de runlevel; y la caracteristica importante que tiene esta accion
es que tiene el efecto de la accion "respawn"; por lo que si muere el
proceso
se lanza nuevamente.
FIN - por ahora! ... gracias TOTALES!!!