[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!!!