Просмотр исходного кода

[bin] Try fixing pinentry wrapper

Colin Powell 10 часов назад
Родитель
Сommit
1966bcf411
1 измененных файлов с 17 добавлено и 11 удалено
  1. 17 11
      bin/.bin/pinentry-wrapper

+ 17 - 11
bin/.bin/pinentry-wrapper

@@ -1,23 +1,29 @@
 #!/bin/sh
-# Pick a working pinentry for this machine/session.
-# Preference order: Emacs pinentry (if in Emacs), mac GUI pinentry, GTK/QT, curses.
+# Deterministic, context-aware pinentry selector
 
-# If you use pinentry-emacs and want it when Emacs is running:
-if command -v pinentry-emacs >/dev/null 2>&1; then
+# 1. Emacs — only when actually inside Emacs
+if [ -n "$INSIDE_EMACS" ] && command -v pinentry-emacs >/dev/null 2>&1; then
   exec pinentry-emacs "$@"
 fi
 
-# macOS GUI pinentry (Homebrew paths)
+# 2. macOS GUI
 if [ "$(uname -s)" = "Darwin" ]; then
   if [ -x /opt/homebrew/bin/pinentry-mac ]; then exec /opt/homebrew/bin/pinentry-mac "$@"; fi
   if [ -x /usr/local/bin/pinentry-mac ]; then exec /usr/local/bin/pinentry-mac "$@"; fi
 fi
 
-# Common Linux GUI pinentries
-if command -v pinentry-gnome3 >/dev/null 2>&1; then exec pinentry-gnome3 "$@"; fi
-if command -v pinentry-gtk-2  >/dev/null 2>&1; then exec pinentry-gtk-2 "$@"; fi
-if command -v pinentry-qt    >/dev/null 2>&1; then exec pinentry-qt "$@"; fi
+# 3. Linux GUI — only if a GUI session exists
+if [ -n "$WAYLAND_DISPLAY" ] || [ -n "$DISPLAY" ]; then
+  if command -v pinentry-gnome3 >/dev/null 2>&1; then exec pinentry-gnome3 "$@"; fi
+  if command -v pinentry-gtk-2  >/dev/null 2>&1; then exec pinentry-gtk-2 "$@"; fi
+  if command -v pinentry-qt    >/dev/null 2>&1; then exec pinentry-qt "$@"; fi
+fi
+
+# 4. TTY fallback
+if command -v pinentry-curses >/dev/null 2>&1; then
+  exec pinentry-curses "$@"
+fi
 
-# Fallback (may fail in dumb/no-tty contexts)
-if command -v pinentry-curses >/dev/null 2>&1; then exec pinentry-curses "$@"; fi
+# 5. Last resort
 exec pinentry "$@"
+