diff --git a/src/apps/terminal/Arguments.cpp b/src/apps/terminal/Arguments.cpp index 3c3405238b..7e162b2497 100644 --- a/src/apps/terminal/Arguments.cpp +++ b/src/apps/terminal/Arguments.cpp @@ -10,7 +10,7 @@ #include "Arguments.h" -Arguments::Arguments() +Arguments::Arguments(int defaultArgsNum, const char * const *defaultArgs) : fUsageRequested(false), fBounds(50, 50, 630, 435), fStandardShell(true), @@ -19,9 +19,7 @@ Arguments::Arguments() fShellArguments(NULL), fTitle(NULL) { - const char *argv[] = { "/bin/bash", "--login" }; - - _SetShellArguments(2, argv); + _SetShellArguments(defaultArgsNum, defaultArgs); } diff --git a/src/apps/terminal/Arguments.h b/src/apps/terminal/Arguments.h index 36075a837a..aff36e92db 100644 --- a/src/apps/terminal/Arguments.h +++ b/src/apps/terminal/Arguments.h @@ -10,7 +10,7 @@ class Arguments { public: - Arguments(); + Arguments(int defaultArgcNum, const char *const *defaultArgv); ~Arguments(); void Parse(int argc, const char *const *argv); diff --git a/src/apps/terminal/TermApp.cpp b/src/apps/terminal/TermApp.cpp index 4d019ba179..95afea4b9b 100644 --- a/src/apps/terminal/TermApp.cpp +++ b/src/apps/terminal/TermApp.cpp @@ -10,6 +10,7 @@ #include "TermApp.h" #include +#include #include #include #include @@ -35,7 +36,7 @@ static bool sUsageRequested = false; //static bool sGeometryRequested = false; - +const char *kDefaultShell = "/bin/bash"; const ulong MSG_ACTIVATE_TERM = 'msat'; const ulong MSG_TERM_WINDOW_INFO = 'mtwi'; @@ -49,7 +50,7 @@ main() return 0; } - + TermApp::TermApp() : BApplication(TERM_SIGNATURE), fStartFullscreen(false), @@ -57,8 +58,20 @@ TermApp::TermApp() fTermWindow(NULL), fArgs(NULL) { - fArgs = new Arguments(); - + const char *defaultArgs[2]; + defaultArgs[0] = kDefaultShell; + defaultArgs[1] = "--login"; + + struct passwd passwdStruct; + struct passwd *passwdResult; + char stringBuffer[256]; + if (!getpwuid_r(getuid(), &passwdStruct, stringBuffer, + sizeof(stringBuffer), &passwdResult)) { + defaultArgs[0] = passwdStruct.pw_shell; + } + + fArgs = new Arguments(2, defaultArgs); + fWindowTitle = "Terminal"; _RegisterTerminal();