我尝试fish
了一段时间,然后我想将其设置为我的默认 shell。我编辑/etc/passwd
并将我的用户的 shell 更改为/bin/fish
。
问题是我无法再登录。我尝试通过我的 DM(SDDM),它说无论我输入什么密码,登录都会失败,无论正确与否。然后我通过 tty 尝试,得到了相同的结果。用fish
我之前在文件中使用的 shell替换passwd
似乎解决了这个问题。
有什么方法可以将其设置fish
为默认 shell 并且仍然能够登录?
我正在运行 Manjaro Linux。
答案1
您需要将此 shell 添加到/etc/shells
。手动的内容如下:
/etc/shells
是一个包含有效登录 shell 的完整路径名的文本文件。chsh(1)
其他程序可以查阅和查询此文件。请注意,有些程序会查阅此文件来确定用户是否是普通用户;例如,FTP 守护程序通常不允许使用此文件中未包含的 shell 的用户访问。
在我的 Kubuntu 中,内容如下/etc/shells
:
# /etc/shells: valid login shells /bin/sh /bin/dash /bin/bash /bin/rbash /usr/bin/tmux /bin/zsh /usr/bin/zsh /usr/bin/fish /bin/tcsh /usr/bin/tcsh
如您所见,它的格式非常直观。在我的例子中,fish
它为/usr/bin/fish
。请确保您的例子中的正确路径为/bin/fish
,并将其添加到您的文件中。
注意最好使用chsh
更改您的登录 shell,而不是/etc/passwd
手动编辑。如果您这样做
chsh -s /bin/fish
你可能会得到
chsh: /bin/fish is an invalid shell
调查此问题(与man 1 chsh
/etc/shells
) 可能会向你揭示的存在。
该工具旨在由非特权用户运行。如果/etc/shells
(由 root 控制)的内容是合理的,那么用户通常不可能将自己锁定在外。通过编辑,/etc/passwd
您不仅可能像以前一样将自己锁定在外;您可能(错误地)破坏更多。
答案2
我相信 Linux 要求在 中列出所有有效的登录 shell /etc/shells
。fish
在将其设置为登录 shell 之前,请将其添加到该文件中。请务必使用其完整正确的路径。