diff options
author | Eric Andersen <andersen@codepoet.org> | 2000-09-14 22:01:31 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2000-09-14 22:01:31 +0000 |
commit | 7e3bf6e339a2d1e28fc8ee53ca57919f32eba6d6 (patch) | |
tree | 85ee868c652b45c0859554d73b702acff5df7879 | |
parent | ce40fc044bc50897739581ec0f9fcda38791384d (diff) | |
download | busybox-w32-7e3bf6e339a2d1e28fc8ee53ca57919f32eba6d6.tar.gz busybox-w32-7e3bf6e339a2d1e28fc8ee53ca57919f32eba6d6.tar.bz2 busybox-w32-7e3bf6e339a2d1e28fc8ee53ca57919f32eba6d6.zip |
Add in a patch from robotti@metconnect.com and Chip Rosenthal to make
init do login shell stuff.
-Erik
-rw-r--r-- | examples/inittab | 20 | ||||
-rw-r--r-- | init.c | 66 | ||||
-rw-r--r-- | init/init.c | 66 | ||||
-rw-r--r-- | scripts/inittab | 20 |
4 files changed, 134 insertions, 38 deletions
diff --git a/examples/inittab b/examples/inittab index bb547b740..2515264c7 100644 --- a/examples/inittab +++ b/examples/inittab | |||
@@ -44,7 +44,6 @@ | |||
44 | # tty2::askfirst:/bin/sh | 44 | # tty2::askfirst:/bin/sh |
45 | # | 45 | # |
46 | 46 | ||
47 | |||
48 | # Boot-time system configuration/initialization script. | 47 | # Boot-time system configuration/initialization script. |
49 | # This is run first except when booting in single-user mode. | 48 | # This is run first except when booting in single-user mode. |
50 | # | 49 | # |
@@ -52,16 +51,23 @@ | |||
52 | 51 | ||
53 | # /bin/sh invocations on selected ttys | 52 | # /bin/sh invocations on selected ttys |
54 | # | 53 | # |
55 | # Start an "askfirst" shell on the console (whatever that may be) | 54 | # Note below that we prefix the shell commands with a "-" to indicate to the |
56 | ::askfirst:/bin/sh | 55 | # shell that it is supposed to be a login shell. Normally this is handled by |
57 | # Start an "askfirst" shell on /dev/tty2 | 56 | # login, but since we are bypassing login in this case, BusyBox lets you do |
58 | tty2::askfirst:/bin/sh | 57 | # this yourself... |
58 | # | ||
59 | # Start an "askfirst" shell on the console (whatever that may be). | ||
60 | ::askfirst:-/bin/sh | ||
61 | # | ||
62 | # Start an "askfirst" shell on /dev/tty2-4 | ||
63 | tty2::askfirst:-/bin/sh | ||
64 | tty3::askfirst:-/bin/sh | ||
65 | tty4::askfirst:-/bin/sh | ||
59 | 66 | ||
60 | # /sbin/getty invocations for selected ttys | 67 | # /sbin/getty invocations for selected ttys |
61 | # | 68 | # |
62 | tty4::respawn:/sbin/getty 38400 tty4 | ||
63 | tty5::respawn:/sbin/getty 38400 tty5 | 69 | tty5::respawn:/sbin/getty 38400 tty5 |
64 | 70 | tty6::respawn:/sbin/getty 38400 tty6 | |
65 | 71 | ||
66 | # Example of how to put a getty on a serial line (for a terminal) | 72 | # Example of how to put a getty on a serial line (for a terminal) |
67 | # | 73 | # |
@@ -120,10 +120,12 @@ static _syscall2(int, bdflush, int, func, int, data); | |||
120 | 120 | ||
121 | #define VT_PRIMARY "/dev/tty1" /* Primary virtual console */ | 121 | #define VT_PRIMARY "/dev/tty1" /* Primary virtual console */ |
122 | #define VT_SECONDARY "/dev/tty2" /* Virtual console */ | 122 | #define VT_SECONDARY "/dev/tty2" /* Virtual console */ |
123 | #define VT_LOG "/dev/tty3" /* Virtual console */ | 123 | #define VT_THIRD "/dev/tty3" /* Virtual console */ |
124 | #define VT_FOURTH "/dev/tty4" /* Virtual console */ | ||
125 | #define VT_LOG "/dev/tty5" /* Virtual console */ | ||
124 | #define SERIAL_CON0 "/dev/ttyS0" /* Primary serial console */ | 126 | #define SERIAL_CON0 "/dev/ttyS0" /* Primary serial console */ |
125 | #define SERIAL_CON1 "/dev/ttyS1" /* Serial console */ | 127 | #define SERIAL_CON1 "/dev/ttyS1" /* Serial console */ |
126 | #define SHELL "/bin/sh" /* Default shell */ | 128 | #define SHELL "-/bin/sh" /* Default shell */ |
127 | #define INITTAB "/etc/inittab" /* inittab file location */ | 129 | #define INITTAB "/etc/inittab" /* inittab file location */ |
128 | #ifndef INIT_SCRIPT | 130 | #ifndef INIT_SCRIPT |
129 | #define INIT_SCRIPT "/etc/init.d/rcS" /* Default sysinit script. */ | 131 | #define INIT_SCRIPT "/etc/init.d/rcS" /* Default sysinit script. */ |
@@ -171,6 +173,8 @@ initAction *initActionList = NULL; | |||
171 | 173 | ||
172 | 174 | ||
173 | static char *secondConsole = VT_SECONDARY; | 175 | static char *secondConsole = VT_SECONDARY; |
176 | static char *thirdConsole = VT_THIRD; | ||
177 | static char *fourthConsole = VT_FOURTH; | ||
174 | static char *log = VT_LOG; | 178 | static char *log = VT_LOG; |
175 | static int kernelVersion = 0; | 179 | static int kernelVersion = 0; |
176 | static char termType[32] = "TERM=linux"; | 180 | static char termType[32] = "TERM=linux"; |
@@ -371,11 +375,13 @@ static void console_init() | |||
371 | /* Perhaps we should panic here? */ | 375 | /* Perhaps we should panic here? */ |
372 | snprintf(console, sizeof(console) - 1, "/dev/null"); | 376 | snprintf(console, sizeof(console) - 1, "/dev/null"); |
373 | } else { | 377 | } else { |
374 | /* check for serial console and disable logging to tty3 & running a | 378 | /* check for serial console and disable logging to tty5 & running a |
375 | * shell to tty2 */ | 379 | * shell to tty2-4 */ |
376 | if (ioctl(0, TIOCGSERIAL, &sr) == 0) { | 380 | if (ioctl(0, TIOCGSERIAL, &sr) == 0) { |
377 | log = NULL; | 381 | log = NULL; |
378 | secondConsole = NULL; | 382 | secondConsole = NULL; |
383 | thirdConsole = NULL; | ||
384 | fourthConsole = NULL; | ||
379 | /* Force the TERM setting to vt102 for serial console -- | 385 | /* Force the TERM setting to vt102 for serial console -- |
380 | * iff TERM is set to linux (the default) */ | 386 | * iff TERM is set to linux (the default) */ |
381 | if (strcmp( termType, "TERM=linux" ) == 0) | 387 | if (strcmp( termType, "TERM=linux" ) == 0) |
@@ -393,7 +399,7 @@ static pid_t run(char *command, char *terminal, int get_enter) | |||
393 | int i, fd; | 399 | int i, fd; |
394 | pid_t pid; | 400 | pid_t pid; |
395 | char *tmpCmd; | 401 | char *tmpCmd; |
396 | char *cmd[255]; | 402 | char *cmd[255], *cmdpath; |
397 | char buf[255]; | 403 | char buf[255]; |
398 | static const char press_enter[] = | 404 | static const char press_enter[] = |
399 | 405 | ||
@@ -404,11 +410,9 @@ static pid_t run(char *command, char *terminal, int get_enter) | |||
404 | "SHELL=/bin/sh", | 410 | "SHELL=/bin/sh", |
405 | termType, | 411 | termType, |
406 | "USER=root", | 412 | "USER=root", |
407 | "ENV=/etc/profile", | ||
408 | 0 | 413 | 0 |
409 | }; | 414 | }; |
410 | 415 | ||
411 | |||
412 | if ((pid = fork()) == 0) { | 416 | if ((pid = fork()) == 0) { |
413 | /* Clean up */ | 417 | /* Clean up */ |
414 | ioctl(0, TIOCNOTTY, 0); | 418 | ioctl(0, TIOCNOTTY, 0); |
@@ -481,6 +485,34 @@ static pid_t run(char *command, char *terminal, int get_enter) | |||
481 | cmd[i] = NULL; | 485 | cmd[i] = NULL; |
482 | } | 486 | } |
483 | 487 | ||
488 | cmdpath = cmd[0]; | ||
489 | |||
490 | /* | ||
491 | Interactive shells want to see a dash in argv[0]. This | ||
492 | typically is handled by login, argv will be setup this | ||
493 | way if a dash appears at the front of the command path | ||
494 | (like "-/bin/sh"). | ||
495 | */ | ||
496 | |||
497 | if (*cmdpath == '-') { | ||
498 | char *s; | ||
499 | |||
500 | /* skip over the dash */ | ||
501 | ++cmdpath; | ||
502 | |||
503 | /* find the last component in the command pathname */ | ||
504 | s = get_last_path_component(cmdpath); | ||
505 | |||
506 | /* make a new argv[0] */ | ||
507 | if ((cmd[0] = malloc(strlen(s)+2)) == NULL) { | ||
508 | message(LOG | CONSOLE, "malloc failed"); | ||
509 | cmd[0] = cmdpath; | ||
510 | } else { | ||
511 | cmd[0][0] = '-'; | ||
512 | strcpy(cmd[0]+1, s); | ||
513 | } | ||
514 | } | ||
515 | |||
484 | #if defined BB_FEATURE_INIT_COREDUMPS | 516 | #if defined BB_FEATURE_INIT_COREDUMPS |
485 | { | 517 | { |
486 | struct stat sb; | 518 | struct stat sb; |
@@ -495,11 +527,11 @@ static pid_t run(char *command, char *terminal, int get_enter) | |||
495 | 527 | ||
496 | /* Now run it. The new program will take over this PID, | 528 | /* Now run it. The new program will take over this PID, |
497 | * so nothing further in init.c should be run. */ | 529 | * so nothing further in init.c should be run. */ |
498 | execve(cmd[0], cmd, environment); | 530 | execve(cmdpath, cmd, environment); |
499 | 531 | ||
500 | /* We're still here? Some error happened. */ | 532 | /* We're still here? Some error happened. */ |
501 | message(LOG | CONSOLE, "Bummer, could not run '%s': %s\n", cmd[0], | 533 | message(LOG | CONSOLE, "Bummer, could not run '%s': %s\n", cmdpath, |
502 | strerror(errno)); | 534 | strerror(errno)); |
503 | exit(-1); | 535 | exit(-1); |
504 | } | 536 | } |
505 | return pid; | 537 | return pid; |
@@ -795,6 +827,12 @@ void parse_inittab(void) | |||
795 | /* Askfirst shell on tty2 */ | 827 | /* Askfirst shell on tty2 */ |
796 | if (secondConsole != NULL) | 828 | if (secondConsole != NULL) |
797 | new_initAction(ASKFIRST, SHELL, secondConsole); | 829 | new_initAction(ASKFIRST, SHELL, secondConsole); |
830 | /* Askfirst shell on tty3 */ | ||
831 | if (thirdConsole != NULL) | ||
832 | new_initAction(ASKFIRST, SHELL, thirdConsole); | ||
833 | /* Askfirst shell on tty4 */ | ||
834 | if (fourthConsole != NULL) | ||
835 | new_initAction(ASKFIRST, SHELL, fourthConsole); | ||
798 | /* sysinit */ | 836 | /* sysinit */ |
799 | new_initAction(SYSINIT, INIT_SCRIPT, console); | 837 | new_initAction(SYSINIT, INIT_SCRIPT, console); |
800 | 838 | ||
@@ -958,9 +996,13 @@ extern int init_main(int argc, char **argv) | |||
958 | /* Check if we are supposed to be in single user mode */ | 996 | /* Check if we are supposed to be in single user mode */ |
959 | if (argc > 1 && (!strcmp(argv[1], "single") || | 997 | if (argc > 1 && (!strcmp(argv[1], "single") || |
960 | !strcmp(argv[1], "-s") || !strcmp(argv[1], "1"))) { | 998 | !strcmp(argv[1], "-s") || !strcmp(argv[1], "1"))) { |
961 | /* Ask first then start a shell on tty2 */ | 999 | /* Ask first then start a shell on tty2-4 */ |
962 | if (secondConsole != NULL) | 1000 | if (secondConsole != NULL) |
963 | new_initAction(ASKFIRST, SHELL, secondConsole); | 1001 | new_initAction(ASKFIRST, SHELL, secondConsole); |
1002 | if (thirdConsole != NULL) | ||
1003 | new_initAction(ASKFIRST, SHELL, thirdConsole); | ||
1004 | if (fourthConsole != NULL) | ||
1005 | new_initAction(ASKFIRST, SHELL, fourthConsole); | ||
964 | /* Start a shell on tty1 */ | 1006 | /* Start a shell on tty1 */ |
965 | new_initAction(RESPAWN, SHELL, console); | 1007 | new_initAction(RESPAWN, SHELL, console); |
966 | } else { | 1008 | } else { |
diff --git a/init/init.c b/init/init.c index b3ae97d2e..7af8c4a95 100644 --- a/init/init.c +++ b/init/init.c | |||
@@ -120,10 +120,12 @@ static _syscall2(int, bdflush, int, func, int, data); | |||
120 | 120 | ||
121 | #define VT_PRIMARY "/dev/tty1" /* Primary virtual console */ | 121 | #define VT_PRIMARY "/dev/tty1" /* Primary virtual console */ |
122 | #define VT_SECONDARY "/dev/tty2" /* Virtual console */ | 122 | #define VT_SECONDARY "/dev/tty2" /* Virtual console */ |
123 | #define VT_LOG "/dev/tty3" /* Virtual console */ | 123 | #define VT_THIRD "/dev/tty3" /* Virtual console */ |
124 | #define VT_FOURTH "/dev/tty4" /* Virtual console */ | ||
125 | #define VT_LOG "/dev/tty5" /* Virtual console */ | ||
124 | #define SERIAL_CON0 "/dev/ttyS0" /* Primary serial console */ | 126 | #define SERIAL_CON0 "/dev/ttyS0" /* Primary serial console */ |
125 | #define SERIAL_CON1 "/dev/ttyS1" /* Serial console */ | 127 | #define SERIAL_CON1 "/dev/ttyS1" /* Serial console */ |
126 | #define SHELL "/bin/sh" /* Default shell */ | 128 | #define SHELL "-/bin/sh" /* Default shell */ |
127 | #define INITTAB "/etc/inittab" /* inittab file location */ | 129 | #define INITTAB "/etc/inittab" /* inittab file location */ |
128 | #ifndef INIT_SCRIPT | 130 | #ifndef INIT_SCRIPT |
129 | #define INIT_SCRIPT "/etc/init.d/rcS" /* Default sysinit script. */ | 131 | #define INIT_SCRIPT "/etc/init.d/rcS" /* Default sysinit script. */ |
@@ -171,6 +173,8 @@ initAction *initActionList = NULL; | |||
171 | 173 | ||
172 | 174 | ||
173 | static char *secondConsole = VT_SECONDARY; | 175 | static char *secondConsole = VT_SECONDARY; |
176 | static char *thirdConsole = VT_THIRD; | ||
177 | static char *fourthConsole = VT_FOURTH; | ||
174 | static char *log = VT_LOG; | 178 | static char *log = VT_LOG; |
175 | static int kernelVersion = 0; | 179 | static int kernelVersion = 0; |
176 | static char termType[32] = "TERM=linux"; | 180 | static char termType[32] = "TERM=linux"; |
@@ -371,11 +375,13 @@ static void console_init() | |||
371 | /* Perhaps we should panic here? */ | 375 | /* Perhaps we should panic here? */ |
372 | snprintf(console, sizeof(console) - 1, "/dev/null"); | 376 | snprintf(console, sizeof(console) - 1, "/dev/null"); |
373 | } else { | 377 | } else { |
374 | /* check for serial console and disable logging to tty3 & running a | 378 | /* check for serial console and disable logging to tty5 & running a |
375 | * shell to tty2 */ | 379 | * shell to tty2-4 */ |
376 | if (ioctl(0, TIOCGSERIAL, &sr) == 0) { | 380 | if (ioctl(0, TIOCGSERIAL, &sr) == 0) { |
377 | log = NULL; | 381 | log = NULL; |
378 | secondConsole = NULL; | 382 | secondConsole = NULL; |
383 | thirdConsole = NULL; | ||
384 | fourthConsole = NULL; | ||
379 | /* Force the TERM setting to vt102 for serial console -- | 385 | /* Force the TERM setting to vt102 for serial console -- |
380 | * iff TERM is set to linux (the default) */ | 386 | * iff TERM is set to linux (the default) */ |
381 | if (strcmp( termType, "TERM=linux" ) == 0) | 387 | if (strcmp( termType, "TERM=linux" ) == 0) |
@@ -393,7 +399,7 @@ static pid_t run(char *command, char *terminal, int get_enter) | |||
393 | int i, fd; | 399 | int i, fd; |
394 | pid_t pid; | 400 | pid_t pid; |
395 | char *tmpCmd; | 401 | char *tmpCmd; |
396 | char *cmd[255]; | 402 | char *cmd[255], *cmdpath; |
397 | char buf[255]; | 403 | char buf[255]; |
398 | static const char press_enter[] = | 404 | static const char press_enter[] = |
399 | 405 | ||
@@ -404,11 +410,9 @@ static pid_t run(char *command, char *terminal, int get_enter) | |||
404 | "SHELL=/bin/sh", | 410 | "SHELL=/bin/sh", |
405 | termType, | 411 | termType, |
406 | "USER=root", | 412 | "USER=root", |
407 | "ENV=/etc/profile", | ||
408 | 0 | 413 | 0 |
409 | }; | 414 | }; |
410 | 415 | ||
411 | |||
412 | if ((pid = fork()) == 0) { | 416 | if ((pid = fork()) == 0) { |
413 | /* Clean up */ | 417 | /* Clean up */ |
414 | ioctl(0, TIOCNOTTY, 0); | 418 | ioctl(0, TIOCNOTTY, 0); |
@@ -481,6 +485,34 @@ static pid_t run(char *command, char *terminal, int get_enter) | |||
481 | cmd[i] = NULL; | 485 | cmd[i] = NULL; |
482 | } | 486 | } |
483 | 487 | ||
488 | cmdpath = cmd[0]; | ||
489 | |||
490 | /* | ||
491 | Interactive shells want to see a dash in argv[0]. This | ||
492 | typically is handled by login, argv will be setup this | ||
493 | way if a dash appears at the front of the command path | ||
494 | (like "-/bin/sh"). | ||
495 | */ | ||
496 | |||
497 | if (*cmdpath == '-') { | ||
498 | char *s; | ||
499 | |||
500 | /* skip over the dash */ | ||
501 | ++cmdpath; | ||
502 | |||
503 | /* find the last component in the command pathname */ | ||
504 | s = get_last_path_component(cmdpath); | ||
505 | |||
506 | /* make a new argv[0] */ | ||
507 | if ((cmd[0] = malloc(strlen(s)+2)) == NULL) { | ||
508 | message(LOG | CONSOLE, "malloc failed"); | ||
509 | cmd[0] = cmdpath; | ||
510 | } else { | ||
511 | cmd[0][0] = '-'; | ||
512 | strcpy(cmd[0]+1, s); | ||
513 | } | ||
514 | } | ||
515 | |||
484 | #if defined BB_FEATURE_INIT_COREDUMPS | 516 | #if defined BB_FEATURE_INIT_COREDUMPS |
485 | { | 517 | { |
486 | struct stat sb; | 518 | struct stat sb; |
@@ -495,11 +527,11 @@ static pid_t run(char *command, char *terminal, int get_enter) | |||
495 | 527 | ||
496 | /* Now run it. The new program will take over this PID, | 528 | /* Now run it. The new program will take over this PID, |
497 | * so nothing further in init.c should be run. */ | 529 | * so nothing further in init.c should be run. */ |
498 | execve(cmd[0], cmd, environment); | 530 | execve(cmdpath, cmd, environment); |
499 | 531 | ||
500 | /* We're still here? Some error happened. */ | 532 | /* We're still here? Some error happened. */ |
501 | message(LOG | CONSOLE, "Bummer, could not run '%s': %s\n", cmd[0], | 533 | message(LOG | CONSOLE, "Bummer, could not run '%s': %s\n", cmdpath, |
502 | strerror(errno)); | 534 | strerror(errno)); |
503 | exit(-1); | 535 | exit(-1); |
504 | } | 536 | } |
505 | return pid; | 537 | return pid; |
@@ -795,6 +827,12 @@ void parse_inittab(void) | |||
795 | /* Askfirst shell on tty2 */ | 827 | /* Askfirst shell on tty2 */ |
796 | if (secondConsole != NULL) | 828 | if (secondConsole != NULL) |
797 | new_initAction(ASKFIRST, SHELL, secondConsole); | 829 | new_initAction(ASKFIRST, SHELL, secondConsole); |
830 | /* Askfirst shell on tty3 */ | ||
831 | if (thirdConsole != NULL) | ||
832 | new_initAction(ASKFIRST, SHELL, thirdConsole); | ||
833 | /* Askfirst shell on tty4 */ | ||
834 | if (fourthConsole != NULL) | ||
835 | new_initAction(ASKFIRST, SHELL, fourthConsole); | ||
798 | /* sysinit */ | 836 | /* sysinit */ |
799 | new_initAction(SYSINIT, INIT_SCRIPT, console); | 837 | new_initAction(SYSINIT, INIT_SCRIPT, console); |
800 | 838 | ||
@@ -958,9 +996,13 @@ extern int init_main(int argc, char **argv) | |||
958 | /* Check if we are supposed to be in single user mode */ | 996 | /* Check if we are supposed to be in single user mode */ |
959 | if (argc > 1 && (!strcmp(argv[1], "single") || | 997 | if (argc > 1 && (!strcmp(argv[1], "single") || |
960 | !strcmp(argv[1], "-s") || !strcmp(argv[1], "1"))) { | 998 | !strcmp(argv[1], "-s") || !strcmp(argv[1], "1"))) { |
961 | /* Ask first then start a shell on tty2 */ | 999 | /* Ask first then start a shell on tty2-4 */ |
962 | if (secondConsole != NULL) | 1000 | if (secondConsole != NULL) |
963 | new_initAction(ASKFIRST, SHELL, secondConsole); | 1001 | new_initAction(ASKFIRST, SHELL, secondConsole); |
1002 | if (thirdConsole != NULL) | ||
1003 | new_initAction(ASKFIRST, SHELL, thirdConsole); | ||
1004 | if (fourthConsole != NULL) | ||
1005 | new_initAction(ASKFIRST, SHELL, fourthConsole); | ||
964 | /* Start a shell on tty1 */ | 1006 | /* Start a shell on tty1 */ |
965 | new_initAction(RESPAWN, SHELL, console); | 1007 | new_initAction(RESPAWN, SHELL, console); |
966 | } else { | 1008 | } else { |
diff --git a/scripts/inittab b/scripts/inittab index bb547b740..2515264c7 100644 --- a/scripts/inittab +++ b/scripts/inittab | |||
@@ -44,7 +44,6 @@ | |||
44 | # tty2::askfirst:/bin/sh | 44 | # tty2::askfirst:/bin/sh |
45 | # | 45 | # |
46 | 46 | ||
47 | |||
48 | # Boot-time system configuration/initialization script. | 47 | # Boot-time system configuration/initialization script. |
49 | # This is run first except when booting in single-user mode. | 48 | # This is run first except when booting in single-user mode. |
50 | # | 49 | # |
@@ -52,16 +51,23 @@ | |||
52 | 51 | ||
53 | # /bin/sh invocations on selected ttys | 52 | # /bin/sh invocations on selected ttys |
54 | # | 53 | # |
55 | # Start an "askfirst" shell on the console (whatever that may be) | 54 | # Note below that we prefix the shell commands with a "-" to indicate to the |
56 | ::askfirst:/bin/sh | 55 | # shell that it is supposed to be a login shell. Normally this is handled by |
57 | # Start an "askfirst" shell on /dev/tty2 | 56 | # login, but since we are bypassing login in this case, BusyBox lets you do |
58 | tty2::askfirst:/bin/sh | 57 | # this yourself... |
58 | # | ||
59 | # Start an "askfirst" shell on the console (whatever that may be). | ||
60 | ::askfirst:-/bin/sh | ||
61 | # | ||
62 | # Start an "askfirst" shell on /dev/tty2-4 | ||
63 | tty2::askfirst:-/bin/sh | ||
64 | tty3::askfirst:-/bin/sh | ||
65 | tty4::askfirst:-/bin/sh | ||
59 | 66 | ||
60 | # /sbin/getty invocations for selected ttys | 67 | # /sbin/getty invocations for selected ttys |
61 | # | 68 | # |
62 | tty4::respawn:/sbin/getty 38400 tty4 | ||
63 | tty5::respawn:/sbin/getty 38400 tty5 | 69 | tty5::respawn:/sbin/getty 38400 tty5 |
64 | 70 | tty6::respawn:/sbin/getty 38400 tty6 | |
65 | 71 | ||
66 | # Example of how to put a getty on a serial line (for a terminal) | 72 | # Example of how to put a getty on a serial line (for a terminal) |
67 | # | 73 | # |