vtの代わりにttyにスクリプトを送信する(特定の問題を明示的に、他のソリューションを歓迎)

vtの代わりにttyにスクリプトを送信する(特定の問題を明示的に、他のソリューションを歓迎)

端末エミュレータで実行されたコマンド(この場合はbashスクリプト)をttyに送信する最も簡単な方法は何ですか?


コンテキスト:私はOptimusノートブックでNVIDIA GPUを使用する非常に不便でユーザーフレンドリーな方法に疲れました。 Ubuntuとその派生製品には、再度ログインするだけのカードを切り替える良い方法があります(例:非常に不完全です(SolusはドライバをインストールするときにPRIMEを正しく設定しますが、実際にドライバを削除せずにGPUを切り替えることは不可能です)。 )。

バンブルビーについても知っていますが、ダックテープで固定する絆創膏なので効果があるとしても不信と嫌悪感が少しあります(誤解しないでください。

nvidia-xrunというスクリプトがあります(https://github.com/Witko/nvidia-xrun)それほぼ私が望む機能を実行しますが、まだ少し不便です。

nvidia-xrunに触発され、PRIME機能を比較的うまく実装できるプリミティブシェルスクリプトを作成したいと思います。

私が考えることができる最も簡単な設定は次のとおりです。

  • このスクリプトはディスプレイマネージャを停止します(sudo systemctl stop gdm - gdmとsystemdの場合)。

  • このスクリプトは、以前に配置されたxorg.conf.nvidiaの名前をxorg.conf(nvidiaドライバの正しいxorgエントリを含む)に変更します。

  • (私は、DEとdGPUの出力をIntelカードにオフロードするために必要な2つのxrandr行を含む〜/に.xinitrcを手動で配置しました。)

  • この時点で、スクリプトはXを終了するため、ログインしたttyに戻ります。

  • スクリプトはbbswitchを介してNVIDIA GPUを起動し、カーネルモジュールをロードし、startxを介して正しいXセッションを開始します。

  • セッションからログアウトした後、以前のstartxコマンドが完了したため、スクリプトは続行されます。カーネルモードを削除し、NVIDIA GPUを終了し、xorg.confの名前をxorg.conf.nvidiaに変更し、sudo systemctl start gdmを実行します。だから私は再起動しなければならない場所に戻った。


このシナリオでは、各ステップを実行する方法を知っていますが、このスクリプトをターミナルエミュレータで実行すると、ターミナルが消えるため、Xを殺すとすぐに停止するので、次から実行したいと思います。スクリプトは最初にすべての端末エミュレータに送信されます。しかし、「私はログインしたtty」に送信され、Xが終了したときにスクリプトが実行され続けます。

スクリプトがバックグラウンドで実行されるのではなく、スクリプトと対話できることも重要です。モジュールをアンロードしてGPUをオンまたはオフにするにはsudoが必要なので、パスワードを入力するにはシェルと対話する必要があります。

これは私が解決したい問題ですが、私が望むことを他の方法で達成する方法を知っている人がいる場合(この問題を解決してください)、喜んで聞きたいです。

ベストアンサー1

おすすめ記事