Arch, i3: Can't find or change environment variables

AKM123

New Member
Joined
May 14, 2022
Messages
14
Reaction score
0
Credits
146
I want to change some of my default applications. Following this page on the ArchWiki, I went into my /etc/environment by
Bash:
sudo emacs /etc/environment
file to change these default application variables (e.g. EDITOR=emacs). But it's bare of these:
Code:
#
# This file is parsed by pam_env module
#
# Syntax: simple "KEY=VAL" pairs on separate lines
#
I tried adding the line
Code:
EDITOR=emacs
myself, but that didn't work.
/profile , /profile.d , ~/.profile, /etc/.profile , etc. are all empty.
Here is the output of
Bash:
sudo emacs /etc/security/pam_env.conf
:
Code:
# This is the configuration file for pam_env, a PAM module to load in
# a configurable list of environment variables for a
#
# The original idea for this came from Andrew G. Morgan ...
#<quote>
#   Mmm. Perhaps you might like to write a pam_env module that reads a
#   default environment from a file? I can see that as REALLY
#   useful... Note it would be an "auth" module that returns PAM_IGNORE
#   for the auth part and sets the environment returning PAM_SUCCESS in
#   the setcred function...
#</quote>
#
# What I wanted was the REMOTEHOST variable set, purely for selfish
# reasons, and AGM didn't want it added to the SimpleApps login
# program (which is where I added the patch). So, my first concern is
# that variable, from there there are numerous others that might/would
# be useful to be set: NNTPSERVER, LESS, PATH, PAGER, MANPAGER .....
#
# Of course, these are a different kind of variable than REMOTEHOST in
# that they are things that are likely to be configured by
# administrators rather than set by logging in, how to treat them both
# in the same config file?
#
# Here is my idea:
#
# Each line starts with the variable name, there are then two possible
# options for each variable DEFAULT and OVERRIDE.
# DEFAULT allows an administrator to set the value of the
# variable  to some default value, if none is supplied then the empty
# string is assumed. The OVERRIDE option tells pam_env that it should
# enter in its value (overriding the default value) if there is one
# to use. OVERRIDE is not used, "" is assumed and no override will be
# done.
#
# VARIABLE   [DEFAULT=[value]]  [OVERRIDE=[value]]
#
# (Possibly non-existent) environment variables may be used in values
# using the ${string} syntax and (possibly non-existent) PAM_ITEMs may
# be used in values using the @{string} syntax. Both the $ and @
# characters can be backslash escaped to be used as literal values
# values can be delimited with "", escaped " not supported.
# Note that many environment variables that you would like to use
# may not be set by the time the module is called.
# For example, HOME is used below several times, but
# many PAM applications don't make it available by the time you need it.
#
#
# First, some special variables
#
# Set the REMOTEHOST variable for any hosts that are remote, default
# to "localhost" rather than not being set at all
#REMOTEHOST    DEFAULT=localhost OVERRIDE=@{PAM_RHOST}
#
# Set the DISPLAY variable if it seems reasonable
#DISPLAY        DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY}
#
#
#  Now some simple variables
#
#PAGER        DEFAULT=less
#MANPAGER    DEFAULT=less
#LESS        DEFAULT="M q e h15 z23 b80"
#NNTPSERVER    DEFAULT=localhost
#PATH        DEFAULT=${HOME}/bin:/usr/local/bin:/bin\
#:/usr/bin:/usr/local/bin/X11:/usr/bin/X11
#
# silly examples of escaped variables, just to show how they work.
#
#DOLLAR        DEFAULT=\$
#DOLLARDOLLAR    DEFAULT=    OVERRIDE=\$${DOLLAR}
#DOLLARPLUS    DEFAULT=\${REMOTEHOST}${REMOTEHOST}
#ATSIGN        DEFAULT=""    OVERRIDE=\@
And
Bash:
sudo emacs ~/.bashrc
:
Code:
#
# ~/.bashrc
#

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

alias ls='ls --color=auto'
PS1='[\u@\h \W]\$ '
Finally, here is the output of
Bash:
printenv
:
Bash:
SHELL=/bin/bash
WINDOWID=27262983
COLORTERM=truecolor
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0
LANGUAGE=
I3SOCK=/run/user/1000/i3/ipc-socket.637
SHELL_SESSION_ID=a34ee9f0feef4480ad083eedc3c5daca
DESKTOP_SESSION=i3
EDITOR=emacs
GTK_MODULES=canberra-gtk-module
XDG_SEAT=seat0
PWD=/home/austin
XDG_SESSION_DESKTOP=i3
LOGNAME=austin
XDG_SESSION_TYPE=x11
XAUTHORITY=/home/austin/.Xauthority
XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/austin
MOTD_SHOWN=pam
HOME=/home/austin
LANG=en_US.UTF-8
XDG_CURRENT_DESKTOP=i3
KONSOLE_DBUS_SERVICE=:1.37
KONSOLE_DBUS_SESSION=/Sessions/1
PROFILEHOME=
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
KONSOLE_VERSION=220802
XDG_SESSION_CLASS=user
TERM=xterm-256color
USER=austin
COLORFGBG=15;0
DISPLAY=:0
SHLVL=1
XDG_VTNR=7
XDG_SESSION_ID=2
XDG_RUNTIME_DIR=/run/user/1000
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
GDMSESSION=i3
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
MAIL=/var/spool/mail/austin
KONSOLE_DBUS_WINDOW=/Windows/1
_=/usr/bin/printenv
 


You're using Arch so I'm not sure how valid this is, but you can change the defaults for a lot of things with the following command:

Code:
sudo update-alternatives --all

If you just want to change the terminal, for example, there's this:


I dunno if those are valid for Arch, as I've never tried.
 
AKM123 wrote:
I tried adding the line
Code:
EDITOR=emacs
myself, but that didn't work.
....

printenv
....
Bash:
SHELL=/bin/bash
....
EDITOR=emacs

If you are wanting your default editor to be emacs, then the above output from your text and commands indicates that it already is the default editor, shown conclusively from the printenv output.

If setting your environment variables doesn't work in /etc/environment, then you can set them in your .bashrc file which will just mean that they are set for you as the user rather than for all users on the system.

For example, you could add: EDITOR=nano, to your .bashrc, then run:
Code:
 source .bashrc
echo $EDITOR
which will output: nano. When you use an application that wants to use your editor, it will then choose nano if it's configured properly. In your case, the default is already emacs, so you may not need to change anything. If you change an editor, or an environment variable for yourself as user in your .bashrc, it won't change the global default.
 
Last edited:
AKM123 wrote:


If you are wanting your default editor to be emacs, then the above output from your text and commands indicates that it already is the default editor, shown conclusively from the printenv output.
Alright, I edited my .bashrc and ran the code block provided, and may have worked: When I opened a .org file, it automatically opened in Emacs; however, when I created random empty .txt and .sh files:
Bash:
[user@archlinux ~]$ touch motl.txt
[user@archlinux ~]$ motl.txt
bash: motl.txt: command not found
[user@archlinux ~]$ cat motl.txt
[user@archlinux ~]$ open motl.txt
bash: open: command not found
[user@archlinux ~]$ touch notti.sh
[user@archlinux ~]$ notti.sh
bash: notti.sh: command not found
[user@archlinux ~]$
I also don't know the corresponding variable names (e.g. EDITOR , MAIL , LOGNAME , etc.) for other file types, e.g. I want .pdf and .epub documents to automatically load in Okular, and .jpeg and .png files to automatically open in GIMP. I can't seem to find a list of all possible variable names online, but I just experimented and did edited my .bashrc and put in the line PDF=okular, ran
Bash:
[user@archlinux ~]$ source .bashrc
[user@archlinux ~]$ echo $PDF
okular
to see if that might work. When I navigated to a random PDF in nnn, it still opened it in Firefox (as before.)
 
You're using Arch so I'm not sure how valid this is, but you can change the defaults for a lot of things with the following command:

Code:
sudo update-alternatives --all

If you just want to change the terminal, for example, there's this:


I dunno if those are valid for Arch, as I've never tried.
I think that's a Debian tool; pacman can't find it, the ArchWiki has no page on it, nor do I get any hits from any Arch repos, including the AUR. The package information on the Arch man pages seems to confirm that it's for Debian-based systems.
 
I think that's a Debian tool; pacman can't find it, the ArchWiki has no page on it, nor do I get any hits from any Arch repos, including the AUR. The package information on the Arch man pages seems to confirm that it's for Debian-based systems.

That's unfortunate. It's a handy way to change the defaults on your system. I don't play with Arch enough to know a quick solution like that. I was hopeful, but not certain, that you could do it as easily as a few minutes and a single command. It's a pretty great tool.
 
AKM123 wrote:
When I opened a .org file, it automatically opened in Emacs; however, when I created random empty .txt and .sh files:

Bash:
[user@archlinux ~]$ touch motl.txt
[user@archlinux ~]$ motl.txt
When you, as the user, are accessing the file you created, motl.txt, in the terminal you still need to choose what to open it with any of:
Code:
emacs motl.txt
vim motl.txt
nano motl.txt
In relation to .org files, as I understand it, they are are specific to emacs "org mode".
 
Last edited:
A couple of ways to open a file from the terminal, in your default editor would be to use:
Bash:
"${EDITOR}" /path/to/file
Or
Bash:
xdg-open /path/to/file
But it’s probably more sensible (and less typing) to just use:
Bash:
emacs /path/to/file

Also, there is the environment variable VISUAL which tells the system which editor to use on the desktop.

So if you want to click on a file in your file manager and open it in your favourite editor, maybe set VISUAL to point to emacs too.
 

Members online


Top