Atualmente, o script seat-attach-assistant
do pacote le-multiterminal
cria um terminal novo incondicionalmente sempre que um hub é conectado ao computador. É possível simplificar a configuração, eliminando este script junto com o arquivo 73-seat-attach-assistant.rules
, se vocês acrescentarem a diretiva ENV{ID_AUTOSEAT}="1"
ao arquivo 71-seat-usb.rules
. Por outro lado, uma outra abordagem para o multiterminal é possível.
Quando eu comecei a pesquisar a solução para o multiterminal, parecia-me bastante razoável eliminar o hub do terminal primário e conectar o seu teclado e mouse diretamente ao computador. No entanto, logo nos primeiros feedbacks que eu recebi quando publiquei a solução, perguntaram-me sobre a possibilidade de se usar um hub também com o terminal primário, seja porque desejavam manter o dual-boot com o LE4 ou LE5, seja porque o laboratório foi montado de tal forma que os computadores ficam afastados demais dos terminais para permitir a conexão direta do teclado ou mouse.
Se for desejável para vocês flexibilizar a configuração do multiterminal para permitir o uso do hub também com o terminal primário, uma forma possível de viabilizá-la é substituir a regra do udev que marca os hubs como master-of-seat
por outra que faz o mesmo com a própria placa TN-502. O kernel do Ubuntu inclui, por padrão, o módulo sm501.ko
, que permite expor alguns dispositivos relacionados à placa TN-502 que podemos marcar como master-of-seat
. Exemplo:
# Convenção: associar arquivos de dispositivo desta regra à saída LVDS da placa TN-502
KERNEL=="sm501-fb.[0-9]*", SUBSYSTEM=="platform", TAG+="seat", TAG+="master-of-seat",
# Convenção: associar arquivos de dispositivo desta regra à saída VGA da placa TN-502
KERNEL=="sm501-usb.[0-9]*", SUBSYSTEM=="platform", TAG+="seat", TAG+="master-of-seat"
Além da possibilidade de se usar um hub com o terminal primário, esta solução alternativa para o multiterminal oferece outras “vantagens”:
- conceitualmente, oferece um resultado mais próximo do propósito original do systemd-logind no que tange ao suporte a multiterminais, em que são sempre as placas de vídeo que recebem a marca
master-of-seat
por padrão.
- permite uma configuração fixa do LightDM, não sendo mais necessário gerar dinamicamente o arquivo de configuração
98-xephyr-multi-seat.conf
.
- a configuração do multiterminal fica mais robusta, deixando o sistema menos propenso a instabilidades devido ao mau contato dos hubs USB, por exemplo.
Com esta nova regra, vocês poderiam alterar o script multiseat-controller
, modificando a linha
N_SEATS_LISTED=$(($(loginctl list-seats | grep -c "seat-")+$ONBOARD))
para listar, por exemplo, as saídas de vídeo disponíveis. Então, na rotina que detecta o pressionamento da tecla Fn, vocês poderiam executar o loginctl attach
sob demanda. Por exemplo, se for detectado o pressionamento da tecla no terminal associado à saída de vídeo LVDS da primeira placa TN-502, o script poderia invocar os seguintes comandos:
loginctl attach seat-sm501-0-lvds /syspath/do/dispositivo/sm501-fb.0
loginctl attach seat-sm501-0-lvds /syspath/do/hub/detectado
O único cuidado necessário para esta abordagem é o tratamento adequado das condições de saída do script multiseat-controller
:
- se houver menos teclados conectados do que saídas de vídeo disponíveis, pode acontecer que, após a configuração de todos os teclados conectados, não haja teclados disponíveis para associar a uma determinada saída de vídeo; neste caso, o script encerra a configuração, deixando aquela saída de vídeo desconfigurada (não se executa
loginctl attach seat-... /sys/devices/...
para aquela saída de vídeo).
- se houver mais teclados conectados do que saídas de vídeo disponíveis, pode acontecer que haja um excesso de teclados não associados após a configuração dos terminais em todas as saídas de vídeo disponíveis; neste caso, o script encerra a configuração, deixando o excesso de teclados desconfigurado (por padrão, eles vão para o terminal primário).