diff --git a/config.def.h b/config.def.h index fe81078..cc16f97 100644 --- a/config.def.h +++ b/config.def.h @@ -8,6 +8,7 @@ static char font[] = "Liberation Mono:pixelsize=12:antialias=false:autohint=false"; static int borderpx = 2; static char shell[] = "/bin/sh"; +static char *utmp = NULL; /* identification sequence returned in DA and DECID */ static char vtiden[] = "\033[?6c"; diff --git a/st.c b/st.c index dd3301b..ab3fa6e 100644 --- a/st.c +++ b/st.c @@ -1153,16 +1153,22 @@ execsh(void) { else die("who are you?\n"); } + + if (utmp) + sh = utmp; + else if (pw->pw_shell[0]) + sh = pw->pw_shell; + else + sh = shell; + args = (opt_cmd) ? opt_cmd : (char *[]){sh, NULL}; + snprintf(buf, sizeof(buf), "%lu", xw.win); + unsetenv("COLUMNS"); unsetenv("LINES"); unsetenv("TERMCAP"); - - sh = (pw->pw_shell[0]) ? pw->pw_shell : shell; - snprintf(buf, sizeof(buf), "%lu", xw.win); - setenv("LOGNAME", pw->pw_name, 1); setenv("USER", pw->pw_name, 1); - setenv("SHELL", sh, 1); + setenv("SHELL", args[0], 1); setenv("HOME", pw->pw_dir, 1); setenv("TERM", termname, 1); setenv("WINDOWID", buf, 1); @@ -1174,7 +1180,6 @@ execsh(void) { signal(SIGTERM, SIG_DFL); signal(SIGALRM, SIG_DFL); - args = opt_cmd ? opt_cmd : (char *[]){sh, "-i", NULL}; execvp(args[0], args); exit(EXIT_FAILURE); }