Am pus de cateva zile pe niste statii diskless cu root prin NFS un
  ramdisk cu busybox pt. diagnosticare in caz ca pica interfata din
  varii motive. Sau cel putin asta era intentia...

  Am un script care tine in bucla un shell busybox pe tty11 si care
  testeaza in background conexiunea la retea. Cand vede c-a picat,
  intentia lui e sa faca "./bin/chroot . chvt 11" ca sa ma scoata din
  X si sa ma dea la consola. Numai ca... atunci cand pica interfata si
  asta face chvt, ce era afisat de X pe ecran se "adapteaza" noii
  rezolutii si ingheata tot. Comanda respectiva merge perfect pana
  cand se duce naibii reteaua.

  Vreo idee cum as putea rezolva problema asta?

  Scriptul de care zic arata cam asa:

--------- Cut ---------
#!/bin/bash

Connectivity()
{
    while ./bin/ping -c 1 dcerouter &>/dev/null; do
        ./bin/sleep 5
    done
}

ShellLoop()
{
    exec </dev/tty11 &>/dev/tty11
    while :; do
        bin/sh
        bin/sleep 1
    done
}

Emergency()
{
    Connectivity
    ./bin/chroot . chvt 11
}

mke2fs -m 0 /dev/ram0
mkdir -p /mnt/recovery-rd
mount /dev/ram0 /mnt/recovery-rd
cd /mnt/recovery-rd
tar -xjf /usr/local/ramdisk.tar.bz2
mount -t devfs devfs dev
mount -t proc proc proc

Emergency &
ShellLoop &
--------- Cut ---------

  Mai scosesem eu o bucata de cod din chvt si am compilat static, dar
  nu prea merge:

--------- Cut ---------
#include <fcntl.h>

#define VT_ACTIVATE 0x5606
#define VT_WAITACTIVE 0x5607

int main()
{
        int fd;

        fd = open("./dev/tty", O_RDWR);
        ioctl(fd, VT_ACTIVATE, 11);
        ioctl(fd, VT_WAITACTIVE, 11);
        return 0;
}
--------- Cut ---------

  A mers la teste, dar in practica, ioctl-urile alea zic -1 EINVAL.

moon2:/mnt/recovery-rd# strace ./bin/chvt-11
execve("./bin/chvt-11", ["./bin/chvt-11"], [/* 15 vars */]) = 0
uname({sys="Linux", node="moon2", ...}) = 0
brk(0)                                  = 0x80af000
brk(0x80d0000)                          = 0x80d0000
open("./dev/tty", O_RDWR)               = 3
ioctl(3, VIDIOC_G_COMP or VT_ACTIVATE, 0xb) = -1 EINVAL (Invalid argument)
ioctl(3, VIDIOC_S_COMP or VT_WAITACTIVE, 0xb) = -1 EINVAL (Invalid argument)
exit_group(0)                           = ?



--- 
Detalii despre listele noastre de mail: http://www.lug.ro/


Raspunde prin e-mail lui