13

Any ideas on how can I change the shell to fish?

$ sudo usermod -s /usr/bin/fish jaan
usermod: user 'jaan' does not exist in /etc/passwd
$ getent passwd $USER
jaan:x:15466:94:Jaan A:/home/jaan:/bin/zsh

Related questions: user does not exist in /etc/passwd when trying to change the default shell Seems like it uses ldap.

$ cat /etc/nsswitch.conf
passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap

Having the NOTFOUND=return bit was breaking dns resolution on web1 and web2. But we probably

don't want any of the mdns stuff so let's get rid of it all.

#hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 hosts: files dns

networks: files

protocols: db files services: db files ethers: db files rpc: db files

netgroup: ldap automount: ldap

So I installed ldap relevant package.

$ chsh.ldap
LDAP password for jaan:
Enter the new value, or press ENTER for the default
  Login Shell [/bin/zsh]: /usr/bin/fish
Traceback (most recent call last):
  File "/usr/bin/chsh.ldap", line 69, in <module>
    constants.NSLCD_USERMOD_SHELL: shell,
  File "/usr/share/nslcd-utils/nslcd.py", line 128, in usermod
    assert con.get_response() == constants.NSLCD_RESULT_BEGIN
  File "/usr/share/nslcd-utils/nslcd.py", line 103, in get_response
    return self.read_int32()
  File "/usr/share/nslcd-utils/nslcd.py", line 71, in read_int32
    return _int32.unpack(self.read(_int32.size))[0]
struct.error: unpack requires a string argument of length 4
$ which fish
/usr/bin/fish
$ chsh.ldap
LDAP password for jaan:
Enter the new value, or press ENTER for the default
  Login Shell [/bin/zsh]: "/usr/bin/fish"
/usr/bin/chsh.ldap: "/usr/bin/fish" is an invalid shell
$ /usr/bin/fish
(standard_in) 1: syntax error
Welcome to fish, the friendly interactive shell

3 Answers3

1

Here is a hint : /usr/bin/chsh.ldap: "/usr/bin/fish" is an invalid shell. It seems that you should add /usr/bin/fish to /etc/shells.

pim
  • 3,350
1

Hold on, it's an LDAP user, there is a setting in LDAP that allows you to change the default shell for the user in them.

You can install ldap-account-manager which gives you an webfrontent for the ldap configuration.

apt install ldap-account-manager

enter image description here

This can be done on any server which you want to handle the configuration on. Since you will need to configure the server in the config files anyway. But I would recommend you install it on the server which has the ldap actually running, just so you can remember it easier.

Ziazis
  • 2,184
-1

To quote ajmitch here,

You can set fish as your default shell by running chsh -s which fish Then log out and back in. (To set it back to bash, you need to use Fish syntax of course, like this chsh -s (which bash))

Just use chsh -s which fish And make sure to log out and log back in or restart you computer.

By the way this could be a possible duplicate here: How do I set fish as the default shell?

Max
  • 633