Re: mehrere shells mit einem login
Janto Trappe schrieb am Sam, Jul 07, 2001 05:23:54 +0200:
> IIRC gab es hier vor laengerer Zeit mal einen Thread in dem ein
> Script gepostet wurde, dass es ermoeglicht mit einem (1) login
> mehrere shells zu starten. Man loggt sich z.B. auf tty1 ein und
> anschliessend ist man auf tty2-8 ebenfalls eingeloggt. Kann sich
> noch jemand daran errinnern? Im Archiv habe ich leider nichts
> gefunden, ein Subject oder so waere also hilfreich.
Hi Janto,
ich glaube, Du meinst das hier?
<Zitat>
Date: Mon, 22 Jan 2001 20:44:06 +0100
From: Mathias Gygax <mg@trash.net>
To: debian-user-de@lehmanns.de
Organization: ENIAC
Subject: Re: Start-Script
> Gibt es eine Möglichkeit, ein Script zu schreiben, welches automatisch
beim
> Starten von Linux sechs Konsolen öffnet, damit man nicht von Hand überall
> Loginname und Passwort eingeben muß? Ideal wäre noch, wenn man den
> Benuzternamen im Script jeweils angeben könnte.
ja. da es nur ein rel. kurzes c programm ist, poste ich es mal. sorry
schon mal an alle die, die sich jetzt wegen der grösse aufregen :-/
--[snippelsnappel]--
/*
* utty.c Fri Jun 23 14:12:24 GMT 2000 Herbert Rosmanith
* herp@wildsau.idv.uni-linz.ac.at
*
* bringt eine login shell auf einem tty, ohne dass man sich
* anmelden muss
*
* compile: cc -s -o utty utty.c
*
* Usage: utty <user> <tty>
*
* der geeignetste platz fuer dieses programm ist die inittab,
* etwa so:
*
* /etc/inittab
* [...]
* t6:23:respawn:/sbin/utty herp /dev/tty6
* t7:23:respawn:/sbin/utty herp /dev/tty7
* t8:23:respawn:/sbin/utty herp /dev/tty8
* t9:23:respawn:/sbin/utty herp /dev/tty9
* ta:23:respawn:/sbin/utty herp /dev/tty10
* tb:23:respawn:/sbin/utty herp /dev/tty11
* tc:23:respawn:/sbin/utty herp /dev/tty12
* [...]
* # End of /etc/inittab
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <string.h>
#include <pwd.h>
#include <grp.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
void die(char *s) {
if (errno) perror(s);
else fprintf(stderr,"%s\n",s);
exit(-1);
}
int main(int argc,char *argv[]) {
struct passwd *pwd;
struct group *gr;
char *args[2] = { "-bash", NULL };
char *envp[3]={ "TERM=vt100", NULL, NULL };
char msg[]="\nYou are now on \0\0\0\0\0\0\0\0\0\0\0\0";
char *ch;
int fd;
int i=1;
int main(int argc,char *argv[]) {
struct passwd *pwd;
struct group *gr;
char *args[2] = { "-bash", NULL };
char *envp[3]={ "TERM=vt100", NULL, NULL };
char msg[]="\nYou are now on \0\0\0\0\0\0\0\0\0\0\0\0";
char *ch;
int fd;
int i=1;
if (argc!=3) die("usage: utty <user> <tty>");
if ((pwd=getpwnam(argv[1]))==NULL) die("user unknown");
if ((gr=getgrnam("tty"))==NULL) die("group 'tty' unknown");
close(0);
close(1);
close(2);
if ((fd=open(argv[2],O_RDWR))!=0) die("open");
if (dup2(0,1)!=1) die("dup2 1");
if (dup2(0,2)!=2) die("dup2 2");
if (ioctl(fd,TIOCSCTTY,&i)==-1) die("ioctl TIOCSCTTY");
if (fchown(fd,pwd->pw_uid,gr->gr_gid)==-1) die("fchown");
if (fchmod(fd,0620)==-1) die("fchmod");
strcat(msg,(ch=rindex(argv[2],'/'))?ch+1:argv[2]);
write(fd,msg,strlen(msg));
envp[1]=(char *)malloc(5+/*HOME=*/strlen(pwd->pw_dir)+1);
sprintf(envp[1],"HOME=%s",pwd->pw_dir);
chdir(pwd->pw_dir);
setgid(pwd->pw_gid);
setuid(pwd->pw_uid);
execve("/bin/bash",args,envp);
die("execve");
--[snippelsnappel]--
</Zitat>
Gruß und viel Erfolg beim basteln,
--
Matthias Haehn <you@pfaffenwinkel.de>.
--
-----------------------------------------------------------
Um sich aus der Liste auszutragen schicken Sie bitte eine
E-Mail an debian-user-de-request@lehmanns.de die im Subject
"unsubscribe <deine_email_adresse>" enthaelt.
Bei Problemen bitte eine Mail an: Jan.Otto@Lehmanns.de
-----------------------------------------------------------
850 eingetragene Mitglieder in dieser Liste.
Reply to: