Почему моя оболочка по умолчанию из /etc/passwd не запускается терминалами в сеансе Unity?

Я пытаюсь установить рыбу в качестве оболочки по умолчанию. Он устанавливается в системе через apt-get и указан в /etc/shells:

> which fish
/usr/bin/fish
> grep fish /etc/shells
/usr/bin/fish

я использовал chsh перейти с Баша на рыбу:

> chsh -s /usr/bin/fish

И моя оболочка по умолчанию была изменена в /etc/passwd:

> grep "myusername" /etc/passwd
myusername:x:1000:1000:Oh Spite,,,:/home/myusername:/usr/bin/fish

Потрясающие. Затем я вышел из системы и перезагрузился. Оболочки для входа (например, виртуальные TTY и SSH) теперь запускают fish.

И все же, когда я запускаю терминал с помощью gnome-terminal или urxvt, начинается сеанс bash. Кроме того, SHELL переменная по-прежнему установлена ​​в /bin/bash,

Интересно, что Терминатор использует рыбу в качестве оболочки по умолчанию. Но даже в этой сессии SHELL установлен в /bin/bash, Если я запускаю urxvt из Terminator, urxvt начинает сеанс Bash.

Что еще мне нужно сделать, чтобы сменить оболочку по умолчанию на fish?

(См. Также этот вопрос, но это не дубликат, потому что я следовал этим инструкциям и перезагружался. Много раз сейчас.)

2 ответа

Решение

Большинство терминалов (по крайней мере, например, gnome-terminal, urxvt и XTerm), которые запускаются в среде рабочего стола, такой как Unity, будут использовать SHELL Переменная окружения для выбора оболочки при запуске.

SHELL должен автоматически быть установлен в оболочку по умолчанию, указанную в /etc/passwd, но переменная может быть перезаписана при входе в систему. Убедитесь, что вы не установили SHELL=/bin/bash или что-то подобное в файле, который повлияет на весь сеанс рабочего стола. Такие файлы включают в себя:

  • ~/.profile
  • ~/.pam_environment
  • /etc/environment
  • может быть, некоторые другие файлы, редактируемые пользователями Ubuntu реже, такие как /etc/profile

Дополнительно, если какие-либо сценарии, такие как ~/.bashrc или же ~/.bash_profile вызываются этими другими файлами запуска и есть export SHELL=/bin/bash линия, которая также повлияет на весь сеанс рабочего стола.


Я знаю, что это приемлемо / поощряется, но я все еще ненавижу отвечать на свой вопрос. Тем не менее, это может быть полезным для кого-то в будущем. Спасибо @heemayl и @muru за помощь в расследовании.

Установить fish в качестве оболочки по умолчанию для gnome-terminal, от gnome-terminal идти к:

Edit > Profile Preferences

затем перейдите к Title and Command На вкладке вы получите:

Измените это как:

Теперь, когда вы начинаете новый экземпляр gnome-terminal, fish будет запущен вместо bash,

Другие вопросы по тегам