fix ssh issue, various minor improvements
[distro-setup] / filesystem / etc / profile.d / environment.sh
index d5c7e57f13f1fa5230270124bd1009cdf4de441a..6191cb7eaf3c1958c9d832668f6cbc60a583f530 100644 (file)
@@ -10,7 +10,8 @@ if [ -f $HOME/path-add-function ]; then
   path-add --end /snap/bin
 
 
-  for p in $HOME/.gem/ruby/*/bin; do
+  # ~/.local is newer, eg ruby 3.0+
+  for p in $HOME/.gem/ruby/*/bin $HOME/.local/share/gem/ruby/*/bin; do
     path-add --ifexists --end $p
   done
 
@@ -76,8 +77,9 @@ if [ -f /etc/fedora-release ]; then
   fi
 fi
 
-# and broken again. see /usr/lib/systemd/user-environment-generators/90gpg-agent
-export GPG_AGENT_INFO=$XDG_RUNTIME_DIR/gnupg/S.gpg-agent:0:1
+# 2020: and broken again. see /usr/lib/systemd/user-environment-generators/90gpg-agent.
+# 2022: not sure exactly what this fixed, but gpg seems to work now without it.
+#export GPG_AGENT_INFO=$XDG_RUNTIME_DIR/gnupg/S.gpg-agent:0:1
 
 # and now trisquel9 + mate + i3 has broken ssh agent. I've had to fix
 # ssh or gpg agent like 10 times in different distros, and once again, i
@@ -89,32 +91,52 @@ export GPG_AGENT_INFO=$XDG_RUNTIME_DIR/gnupg/S.gpg-agent:0:1
 # but not override existing things because theres stuff like PWD. This
 # doesn't set SSH_AGENT_PID, but apparently its not needed anymore.
 # Note: what a huge pita to write this in posix shell.
-if test "$EUID" && [ "$EUID" != 0 ]; then
-  _sysenv=$(mktemp)
-  _sysenvnames=$(mktemp)
-  _unsetnames=$(mktemp)
-  if systemctl --user show-environment >$_sysenv 2>/dev/null; then
-    grep -o '^[^=]*' $_sysenv | sort > $_sysenvnames
-    env -0 | grep -zo '^[^=]*' | xargs -0 printf "%s\n" | sort | \
-      comm --nocheck-order -13 - $_sysenvnames >$_unsetnames
-    while read -r unsetname; do
-      while read -r sysenv; do
-        case "$sysenv" in
-          "$unsetname"*) eval export "$sysenv" ;;
-        esac
-      done < $_sysenv
-    done < $_unsetnames
-    rm -f $_tmpf
+# update: disabled this hackery since I'm not using it in t11
+# if test "$EUID" && [ "$EUID" != 0 ]; then
+#   _sysenv=$(mktemp)
+#   _sysenvnames=$(mktemp)
+#   _unsetnames=$(mktemp)
+#   if systemctl --user show-environment >$_sysenv 2>/dev/null; then
+#     grep -o '^[^=]*' $_sysenv | sort > $_sysenvnames
+#     env -0 | grep -zo '^[^=]*' | xargs -0 printf "%s\n" | sort | \
+  #       comm --nocheck-order -13 - $_sysenvnames >$_unsetnames
+#     while read -r unsetname; do
+#       while read -r sysenv; do
+#         case "$sysenv" in
+#           "$unsetname"*) eval export "$sysenv" ;;
+#         esac
+#       done < $_sysenv
+#     done < $_unsetnames
+#     rm -f $_tmpf
+#   fi
+# fi
+
+
+# i use the x11 prompt for ssh key use which doesnt work
+# within an ssh session (perhaps there is some way).
+# Anyways, there is usually no need for an agent to
+# do a 1-off ssh from a remote machine.
+if ! test "$SSH_CLIENT"; then
+  # and it seems that if we log into mate, it screws up the systemd env var anyways.
+  for _file in $(pgrep -a '^ssh-agent$' | sed -r 's/.*-a *([^ ]+).*/\1/'); do
+    if test -O "$_file"; then
+      export SSH_AUTH_SOCK="$_file"
+      break
+    fi
+  done
+
+  # in t11, user ssh-agent once again stopped working, it isn't started anymore
+  # by i3. So, enough is enough, I just made a service that will try to
+  # start it all the time for the user. If the var isn't set by the above,
+  # just set them to the values I know are in the service.
+  if ! test "$SSH_AUTH_SOCK"; then
+    if [ "$EUID" = 0 ]; then
+      export SSH_AUTH_SOCK=/run/openssh_agent
+    elif [ "$EUID" = 1000 ]; then
+      export SSH_AUTH_SOCK=$HOME/openssh_agent
+    fi
   fi
 fi
-# and it seems that if we log into mate, it screws up the systemd env var anyways.
-for _file in $(pgrep -a '^ssh-agent$' | sed -r 's/.*-a *([^ ]+).*/\1/'); do
-  if test -O "$_file"; then
-    export SSH_AUTH_SOCK="$_file"
-    break
-  fi
-done
-
 
 # background:
 # ubuntu has 002 for non-system users, debian has 022.  002 makes groups