将fish设置为默认shell后无法登录


1

我试fish了一会儿,然后我想把它设置为我的默认shell。我编辑/etc/passwd并更改了用户的shell /bin/fish

问题是我无法再登录了。我尝试通过我的DM(SDDM),它表示登录失败了我输入的任何密码,无论是正确还是错误。然后我通过tty尝试了它,得到了相同的结果。fish用我以前在我的passwd文件中的shell 替换似乎解决了这个问题。

有没有办法设置fish为默认shell,仍然能够登录?

我正在运行Manjaro Linux。


1
你的主要错误是手动编辑/ etc / passd。如果您使用适当的命令来更改登录shell(例如chsh),它会/应该警告您有关该问题的信息。
Kurtis Rader

Answers:


2

您需要将此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你不仅可以像你一样锁定自己; 你可能(错误地)打破更多。


1

我相信Linux要求列出所有有效的登录shell /etc/shellsfish在将其设置为登录shell之前添加到该文件。一定要使用完整正确的路径。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.