$SHELL をデフォルト値にリセット

$SHELL をデフォルト値にリセット

私はこの質問に対する答えを読んだ。これ&&これ)、そのどれも私には適していません!

% uname --operating-system --kernel-name --kernel-version --kernel-release 
Linux 4.9.6-200.fc25.x86_64 #1 SMP Thu Jan 26 10:17:45 UTC 2017 GNU/Linux

st端末をダウンロード/インストールしました(シンプル端末)、これをデフォルトの端末エミュレータとして設定したかったのですが大きな間違い、このコマンドをrootとして実行しています% su -c 'chsh -s /usr/local/bin/st'

rootとしてログインするかコマンドを実行しようとするたびに、次のメッセージが表示されますCan't open display。次のコマンド(以下の表示)を試してみましたが、何も機能しません。

% env -i bash
% su
Password:
Can't open display
% su -c 'env -i bash'
Password:
Can't open display
% su -c 'chsh -s /usr/bin/bash'
Password:
Can't open display
% su -s bash
Password: 
su: using restricted shell /usr/local/bin/st
Can't open display
% su
Password:
Couldn't read from shell: Input/output error
child finished with error '256'
% 

修正する: 提案された回答の指示に従ってください。

  1. ブートローダのプロンプトで、ブートに関する一般的なエントリに移動します。
  2. Enterを押すのではなく、eを押してカーネルコマンドラインパラメータを最初に編集します。
  3. 開いたエディタで、矢印キーを使用してlinuxで始まる行を見つけて、その最後に移動してinit = / bin / shを追加します。これは一時的にinitシステムをシステムのシェルに置き換えます。initはルートによって開始されるため、これはルートシェルになります。
  4. CTRL+X を押して変更した項目を実行します。
  5. 正しいパラメーターを使用してchshを再実行してください。

ただし、手順4を実行すると、次の問題に直面します。これ画面!

ベストアンサー1

私は大きな間違いをしました。

あなたはそうでした。この問題に対する解決策は、スーパーユーザーとして構成されたログインシェルを使用せずにスーパーユーザーとしてコマンドを実行する方法を見つけることです。

構造と緊急モードでは不可能です。〜しない限り/usr皮肉なことに、過去30年間の傾向とは対照的に、個々のディスクボリュームを持つことは幸運です。含まれているディスクボリュームが/usr/local/bin/stルートディレクトリではない場合、ファイルは実行されません。この場合、緊急ログインには次のコマンドを使用するsuloginか、emergency-loginハードワイヤードシェル名でフォールバックを試みます。

これを達成する別の方法は、スーパーユーザーのユーザーアカウントデータベースに提供されているシェルの代わりに、環境変数によって提供されたシェルを対話型シェルとして実行する-sオプションを使用することです。 (オプションを比較してください。)sudoSHELL-i

doas -s同様に、環境変数で指定されたシェルを使用してくださいSHELL

一部のオペレーティングシステムsuコマンドはオプションでこれを行うこともできます--shell。しかし、これは一般的なことではありません。また、前述のように、アカウントデータベースのスーパーユーザーシェルが認証されたシェルリスト()にない場合は/etc/shells無視されます。

おすすめ記事