On 2021-10-17 19:09, Greg Wooledge wrote:
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

I very much appreciate this kind of clear overview explanation of things. Without any formal, structured education in these things many documents seem to assume you already know what you are reading.

mick
--
Key ID    4BFEBB31

Reply via email to