On Sun, Oct 17, 2021 at 06:35:01PM +0200, deloptes wrote: > > 2. and another pesky thing is starting a konsole to do work, needs a > > $PATH modification that we used to put in ~.profile. But opening a > > terminal hasn't called a ". .profile" since about jessie. So thats > > another PITA. > > > > So, what has replaced .profile as the function for such as that in recent > > releases? > > AFAIK bash is not reading profile when you login, but not sure - it could be > also that it is not a login shell. > AFAIK you should open the terminal with "bash --login" to read the profile. > So try in the terminal "bash --login" > > I have put in my .profile > > alias bash='bash --login' > > long time ago
OK, first thing first: that alias won't do *anything* useful. If Gene is talking about starting a terminal from his window manager or desktop environment, that terminal is going to run $SHELL which is /bin/bash. It will not look at his aliases, no matter where they're defined. It's just going to run bash. Not "bash --login". Now let's step back a bit. When you run an instance of a shell, there are two ways you can do it. You either run a "login shell", or a "non-login shell". The purpose of a login shell is to be executed when you login. That's the original intent. Back in the 70s and 80s, there was no such thing as a "desktop". There was just the shell. You logged in by connecting your terminal or your modem to the host system, and getting a textual prompt. After authentication, you were "logged in", and the system would run your account's shell with a "-" character in front of it. This is the ancient way that your system said "this should be a login shell, not a regular shell". It looks like this: unicorn:~$ ps -ft tty1 UID PID PPID C STIME TTY TIME CMD root 699 1 0 Oct09 tty1 00:00:00 /bin/login -p -- greg 851 699 0 Oct09 tty1 00:00:00 -bash greg 863 851 0 Oct09 tty1 00:00:00 /bin/sh /usr/bin/startx [...] See where it says "-bash"? That's my login shell. The purpose of having a "login shell" and a "regular shell" is because you probably have some things that you need to do once per session, when you login. Like, setting up your environment variables. Or printing today's calendar, or today's message from the administration. All of those things are unnecessary in a regular shell. The environment is already set up, and you've already seen today's calendar or whatever. Any other time you started a shell, it would not have a "-" in front of its name, so it would be a regular shell. This included shell escapes from your text editor or mail reader or news reader or pager. Any time you escaped to a new shell from inside your editor, you didn't need to go through all the gyrations that a login shell did. You don't want to see the calendar again, etc. A decade or two later, some people developed a windowing system. In this windowing system, there's a terminal emulator. Normally when you run a terminal emulator, you run a shell inside it. (Not always, but usually.) This shell doesn't need to be a login shell. You're probably going to open half a dozen terminal emulators with shells in them, maybe more. You don't need to run the day's calendar, or set up the session environment, in every single terminal. All of that has been taken care of already. (Right?) So, in an X terminal emulator, you normally run a NON-login shell. Just a regular shell. That's how it's supposed to work. However. Some people found that they had a really hard time getting their initial environment set up during their X logins. This was common among newbies especially, because they didn't understand the new login procedure, and had no idea how to customize it. And where did we have a shit-load of Unix newbies? Universities. So, in the world of academia, there is a whole different paradigm. In this world, where everyone is expected to be incompetent, the old way of setting up your environment one time and inheriting it in every shell... that doesn't work. In the newbie-centric environment, where nobody knows how to do anything correctly, terminal emulators are configured to run login shells. There's an option for it, of course. The people who wrote xterm realized that one might wish to run either a regular shell or a login shell. So xterm has this option: -ls This option indicates that the shell that is started in the xterm window will be a login shell (i.e., the first character of argv[0] will be a dash, indicating to the shell that it should read the user's .login or .profile). Universities configured things so that their users' terminals would all run with this option, which means the users would get a login shell in each terminal. And then the users, who were all newbies and don't know any better, could simply be told "if you want to change your environment, edit this one dot file". (In academia, csh was the dominant shell, so the file in question would usually be .login as the xterm man page hints at. In most Linux distributions, the shell is bash, so the file is .profile or .bash_profile. But in any case, there's just *one* file for the user to worry about, and support calls are reduced.) In modern times, the place where we find nothing but newbies as far as the eye can see... is called Ubuntu. If you get a question from an Ubuntu user, they're probably completely inexperienced, and know virtually nothing. Therefore, in an Ubuntu setup, it would make sense to strip everything down so there's only one way to do things. That makes it easier to answer questions. You don't have to *educate* the user. You don't have to help them understand anything. You don't have to explain why things work they way they do. You just tell them "edit this file". In Gene's old environment, someone had clearly gone Academia/Ubuntu on him, and had configured his terminals to run login shells. This isn't *wrong*. It's a way to do things. But what it means is Gene was operating in Ubuntu-user mode for all that time. He never learned the original way to do things, or why he was using the simplified way, or even that there *was* a choice of ways. So, that's the history and background. Now we're back to the present. The question, I believe, is: **** How do I set up my environment? **** This is not a trivial question to answer, because there are so many different possible setups. It all depends on how you login. 1) If you ssh into the system, then you get a login shell. This login shell *is* your session. So, all you have to do is set up your login shell environment. If your shell is bash, then you edit the file .bash_profile if that exists, or .bash_login if that exists, or .profile if neither of the other two files exists. On a regular Debian system, there is no .bash_profile or .bash_login file, so you'd simply edit .profile. That's the only file you have to worry about for your login enviroment. 2) If you login on the Linux console (/dev/tty1 and so on), in text mode, then you *also* get a login shell. So everything is the same as the ssh case. See above. Even if you start an X session (by typing "startx"), your environment has already been set up by your login shell. You don't need to set it up again inside the X session. The X session inherits the environment from the login shell, and then the terminal emulators inherit it from the X session, and the shells that run inside the terminal emulators inherit it from the terminals. 3) If you login to X11 with a graphical display manager, everything is completely different. You do *not* get a login shell as your session. You don't get a login shell at all. Ever. (Unless someone went and Ubuntu-fied your terminals.) In this case, you can have one of a few different types of session. Because why would anything ever be simple? If you use a standard Debian X11 session, you can configured it in one of two different ways: a) If you have a .xsession file, this overrides the system's X11 session. You control exactly what gets executed. You can configure your environment in the .xsession file, or you can have it dot in a shell configuration file. You just have to know what you're doing. b) If you use the standard system session, Debian lets you customize it in the .xsessionrc file. This gets dotted in by the session before it starts running X apps. So you can configure your environment in this file. .xsessionrc is unique to Debian. It's not found on other Linux variants. Some other Linuxes introduce .xprofile or other files. And then there's GNOME. Because obviously GNOME has to be unique and have its own separate session type, and its own way of doing everything, none of the answers above applies to GNOME. Except maybe the .xsessionrc file. I think Debian still arranges for GNOME sessions to dot that in. Maybe. Don't quote me on it. (But don't think that your job is done if you manage to export environment variables from .xsessionrc. Oh no. GNOME is *so* much worse than that. It's so bad that I won't even try to describe it here. It needs a whole thread of its own. We've had several over the years.) 4) And finally there's Wayland. I don't know what the hell Wayland does. Nobody who uses it has ever told us how it works. You won't find any useful information about it on the Debian wiki, etc. See also: https://wiki.debian.org/Xsession https://wiki.debian.org/EnvironmentVariables