Human interaction in %PRE text mode with snack Dialog boxes
Eric Smith
eric at trueblade.com
Tue Apr 1 18:36:57 UTC 2008
Meyers, John J wrote:
>
> Hi All,
> The %pre mode seems to conduct I/O with tty3. With primary
> anaconda user interaction displays on tty1. I need to interact with the
> user on tty1 during %pre; Using python and snack. Due to using various
> weird hardware in our environment a graphical install dos not work.
> The Code below is just an example of what I've tried.
>
> %pre --interpreter /usr/bin/python
> TTY = 1
> import os
> import sys
> import snack
> import time
> import fcntl
> import termios
> os.system("chvt %d" % TTY)
> fd = os.open("/dev/tty%d" % TTY, os.O_RDWR)
> os.dup2(fd, 0)
> os.dup2(fd, 1)
> os.dup2(fd, 2)
> sys.stdin = os.fdopen(0, "r")
> sys.stdout = os.fdopen(1, "w")
> sys.stderr = os.fdopen(2, "w")
> screen = snack.SnackScreen()
> snack.ButtonChoiceWindow(screen, "WARNING",
> "WARNING! Am I CRAZY!",
> buttons=["reboot", "continue"]):
> os.system("reboot")
> while 1: time.sleep(10)
> screen.finish()
> os.system("chvt %d" % 3)
> %end
> ANY suggestions??
I use code like this:
set_tty(1) # change to tty1, we're called by
# kickstart with stdout as tty3
user_args = get_user_input(host_config, args.args.get('tb-host'))
set_tty(3) # restore
Where:
def set_tty(n):
f = open('/dev/tty%d' % n, 'a')
os.dup2(f.fileno(), sys.stdin.fileno())
os.dup2(f.fileno(), sys.stdout.fileno())
os.dup2(f.fileno(), sys.stderr.fileno())
and get_user_input() uses snack.
Hope that helps.
Eric.
More information about the Kickstart-list
mailing list