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

分享于 

3分钟阅读

电脑

  繁體 雙語

问题:

我试过 fish 一段时间,然后我想将它设置为默认的shell。 我编辑了 /etc/passwd,并将用户的shell 更改为 /bin/fish

问题是我不能再登录了。 我试过我的DM ( SDDM ),它说登录失败,我抛出的任何密码,正确或者错误。 然后我通过一个tty尝试了同样的结果。 在 passwd 文件中用 shell 替换 fish 似乎修复了这个问题。

是否可以将 fish 设置为默认 shell,并且仍然能够登录?

我正在运行 Manjaro Linux。


回答 1:

我相信Linux要求在 /etc/shells 中列出所有有效的登录 shell。 将 fish 添加到该文件之前,将它的设置为你的登录 shell。 请确保使用它的完整的正确路径。


回答 2:

你需要将这里 shell 添加到 /etc/shells手册读取:

/etc/shells 是一个文本文件,包含有效登录shell的完整路径名。 这里文件由 chsh(1) 查询,并可以供其他程序查询。

请注意,有些程序查询该文件,以查找用户是否是正常用户;例如,FTP守护进程不允许访问用户。

在我的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 控制)的内容是理性的,那么用户通常不可以能将自己锁定出来。 你可以编辑你自己,你可能会像你那样把自己锁在外面;你可能会把更多的东西放在一起。



SET  log  DEF  Shell  Setting  默认