Recently I have switched to doas (portable fork of the OpenBSD
doas command, a simpler alternative to
sudo) and on my Gentoo workstation Emacs tramp didn’t like the switch.
It went into a infinite loop as it couldn’t recognize the shell’s prompt. The difference is how bash shell spawned by
sudo was behaving in comparison to when spawned by
doas (by default tramp spawns the shell using
doas -u user -s)
tramp-shell-prompt-pattern didn’t helped me much so as a workaround I just changed how the shell is spawned by making
su instead of the shell directly.
Snippet below when put in
init.el will make tramp to work with
;; you may want to skip the "sudo" if you don't use doas on ;; remote machines as well. (dolist (method '("doas" "sudo")) (add-to-list 'tramp-methods `(,method (tramp-login-program "doas") (tramp-login-args (("-u" "%u") ("su - %u"))) (tramp-remote-shell ,tramp-default-remote-shell) (tramp-remote-shell-args ("-c")) (tramp-connection-timeout 10) (tramp-session-timeout 300) (tramp-password-previous-hop t))))
More of a workaround than a solution, but it works reliably. Happy hacking!