Enviando um script para tty em vez de vt (problema específico declarado, outras soluções são bem-vindas)

2

Estou curioso para saber qual é a maneira mais simples de enviar um comando executado (neste caso, um script bash), que foi executado em um emulador de terminal em um tty.

Contexto: Estou farto da maneira terrivelmente desconfortável e hostil ao usuário de usar a GPU NVIDIA em um laptop Optimus. O Ubuntu e seus derivados têm uma boa maneira de trocar cartões que envolvem apenas um relogging (por exemplo, reiniciando a sessão X), no entanto eu não gosto muito do Ubuntu, e todas as outras distros que eu conheço não têm tal utilidade, ou é altamente imperfeito (o Solus configura PRIME corretamente na instalação do driver, mas a comutação de GPUs é impossível sem realmente desinstalar o driver).

Eu também sei sobre o Bumblebee, mas é uma correção bandaid unida por fita adesiva, então, mesmo que funcione, eu tenho uma certa desconfiança e repulsa por isso (não me entenda mal, eu acho que o projeto é brilhante , mas eu prefiro apenas uma maneira menos duct-tape-y ...).

Existe um script chamado nvidia-xrun ( link ) que quase faz o que eu Estou procurando, mas ainda é um pouco inconveniente.

Inspirado no nvidia-xrun, desejo criar um script de shell primitivo que implemente a funcionalidade PRIME relativamente bem.

A configuração mais simples que eu poderia pensar seria esquematicamente funcionar assim:

  • O script pára o gerenciador de exibição (sudo systemctl stop gdm - para gdm e systemd).

  • O script renomeia um xorg.conf.nvidia colocado anteriormente no xorg.conf (que contém a entrada xorg apropriada para o driver nvidia).

  • (eu coloco manualmente um .xinitrc em ~ / que contém meu DE e as duas linhas xrandr necessárias para descarregar a saída do dGPU para o cartão Intel).

  • O script neste momento mata X, então eu volto para um tty logado.

  • O script ativa a GPU NVIDIA via bbswitch, carrega os módulos do kernel e inicia a sessão X apropriada via startx.

  • Após o logout da sessão, o comando startx anterior é finalizado, então o script continua - ele irá descarregar os mods do kernel, desligar a GPU NVIDIA, renomear xorg.conf para xorg.conf.nvidia e sudo systemctl começa o gdm, então estou de volta onde comecei.

Eu sei como executar cada passo neste esquema, mas se este script é executado a partir de um emulador de terminal, ele irá parar no momento em que eu mato o X, já que seu terminal está desaparecido, então eu gostaria que o script inicial ser executado a partir de um emulador de terminal arbitrário, mas depois enviado para "o tty que eu estou logado", de forma que quando o X terminar, o script continuará rodando.

Também é importante que o script não seja executado apenas em segundo plano, mas que eu possa interagir com ele - já que descarregar os módulos, e ligar / desligar a GPU, requer sudo, então eu precisarei interagir com um shell para colocar minha senha.

Este é o problema que gostaria de resolver, mas se alguém tiver alguma ideia de como implementar o que eu quero de forma diferente (que, espero, contorne esta questão), fico mais do que feliz em ouvir.

    
por Uldreth 06.10.2017 / 15:10

0 respostas