将 fish 设置为默认 shell 后登录失败

将 fish 设置为默认 shell 后登录失败

我尝试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/shellsfish在将其设置为登录 shell 之前,请将其添加到该文件中。请务必使用其完整正确的路径。

相关内容