我很好奇发送已在终端仿真器中执行到 tty 中的已执行命令(在本例中为 bash 脚本)的最简单方法是什么。
语境:我厌倦了在 Optimus 笔记本电脑上使用 NVIDIA GPU 的极其不舒服且用户不友好的方式。 Ubuntu 及其衍生产品有一种很好的切换卡的方法,只需要重新登录(例如重新启动 X 会话),但是我不太喜欢 Ubuntu,而且我知道的所有其他发行版都没有这样的实用程序,或者它非常不完美(Solus 在安装驱动程序时正确配置 PRIME,但在不实际卸载驱动程序的情况下切换 GPU 是不可能的)。
我也知道 Bumblebee,但它是一个用胶带固定在一起的创可贴修复程序,所以即使它有效,我对它也有一定的不信任和厌恶(别误会我的意思,我认为这个项目很棒,但我只是更喜欢一种不太用胶带的方式......)。
有一个名为 nvidia-xrun 的脚本(https://github.com/Witko/nvidia-xrun) 那几乎做了我正在寻找的事情,但仍然有些不方便。
受到 nvidia-xrun 的启发,我希望制作一个原始的 shell 脚本,可以相对较好地实现 PRIME 功能。
我能想到的最简单的设置大致如下:
该脚本停止显示管理器(sudo systemctl stop gdm - 对于 gdm 和 systemd)。
该脚本将先前放置的 xorg.conf.nvidia 重命名为 xorg.conf(其中包含 nvidia 驱动程序的正确 xorg 条目)。
(我手动将 .xinitrc 放入 ~/ 中,其中包含我的 DE 和将 dGPU 的输出卸载到 Intel 卡所需的两个 xrandr 行。)
此时脚本杀死了 X,因此我返回到已登录的 tty。
该脚本通过 bbswitch 唤醒 NVIDIA GPU,加载内核模块,然后通过 startx 启动正确的 X 会话。
注销会话后,之前的 startx 命令已完成,因此脚本将继续 - 它将卸载内核 mod,关闭 NVIDIA GPU,将 xorg.conf 重命名为 xorg.conf.nvidia 并执行 sudo systemctl start gdm,因此我又回到了开始的地方
我知道如何执行这个方案中的每个步骤,但是如果这个脚本是从终端模拟器执行的,它会在我杀死 X 的那一刻停止,因为它的终端消失了,所以我希望从以下位置执行初始脚本任意终端模拟器,但随后发送到“我登录的 tty”,以便当 X 终止时,脚本继续运行。
同样重要的是,脚本不仅仅在后台运行,而且我可以与它交互 - 因为卸载模块和打开/关闭 GPU 需要 sudo,所以我需要与 shell 交互来放置在我的密码中。
这是我想解决的问题,但如果有人知道如何以不同的方式实现我想要的东西(希望能解决这个问题),我非常乐意倾听。