Estou tentando fazer um Lenovo Thinkpad P52 funcionar com um Lenovo USB-C Hybrid Dock ( 40AF , veja docks para evitar ...) no Linux Mint 20.3 Una aka Ubuntu 20.04 . Que... viagem...
O laptop tem sua /home
pasta em um sistema de arquivos ZFS (zpool). O próprio sistema operacional é executado em btrfs
. Os gráficos são alterados para dedicados (ou seja, Nvidia) no BIOS e controlados pelo driver proprietário da Nvidia. O BIOS do laptop foi atualizado para a versão mais recente de antemão para evitar brickar a placa-mãe nesse tipo de configuração (erros de BIOS realmente impressionantes). A segurança Thunderbold também foi desativada no BIOS. Curiosamente, o dock não aparece durante a execução boltctl list
- embora eu tenha que desativar a segurança do Thunderbold. Acho que é aí que entra o "híbrido". Drivers DisplayLink foram instalados a partir daqui . Eu deveria estar pronto para ir.
Quando inicializo o laptop com o dock desconectado , tudo funciona bem . Posso então conectar o dock assim que o computador estiver ligado e a rede mais o USB no dock estiverem funcionando conforme o esperado. (Ainda não estou longe o suficiente da toca do coelho para solucionar problemas na conexão da tela.)
Quando eu inicializo com o dock conectado ao laptop , a inicialização trava por cerca de dois minutos antes que a tela de login apareça. Geralmente mostra uma única linha de saída do console, geralmente algum erro, mas diferentes a cada vez (por exemplo, ucsi_acpi USBC000:00 con1 failed to register alternate modes
ou bluetooth hci0 setting interface failed (71)
). Eu acho que esses erros também acontecem sem o dock - é devido ao travamento que eu posso vê-los, eu acho. Quando espero algum tempo limite passar, é apresentada a tela de login gráfica usual, embora as tentativas de login falhem. Foi quando descobri que meu zpool havia desaparecido (toda vez que inicializava com o dock conectado), portanto, não havia pasta de usuário para fazer login de um usuário. Mudei para a linha de comando ( Ctrl+F1
) e verifiquei zpool status
- nada. Um manual zpool import data
, o conteúdo de/home
apareceu novamente, voltei a tela de login ( Ctrl+F7
) e tudo funcionou bem.
O tempo limite e o fato de meu zpool ter desaparecido sugerem algum tipo de erro durante o carregamento ou inicialização do módulo do kernel, talvez a ordem em que as coisas acontecem - embora eu não tenha certeza de como depurar isso ou o que está acontecendo. Sem o dock, tudo funciona como esperado.
Estou solucionando problemas deste sistema para uma pessoa com deficiência visual. O ponto principal da docking station é que há menos cabos para conectar/desconectar do laptop. É a dificuldade geral de conectar e desconectar os cabos que criou meu cenário. Portanto, é difícil dizer "apenas desconecte o cabo toda vez antes de inicializar a máquina, mesmo que você não a carregue com você", mesmo que seja apenas este cabo.
Os pools ZFS são importados durante a inicialização por meio do
zfs-import-cache.service
serviço. Este falhou no meu caso comresult dependency
.Passando pelas dependências, descobri que
systemd-udev-settle.service
havia falhado antes, reportandoMain process exited, code=exited, status=1/FAILURE
eFailed with result 'exit-code'.
Como isso só acontece quando o Dock está conectado, acabei analisando o DisplayLink e os bugs relacionados. Encontrei esta jóia . Como se vê,
/opt/displaylink/udev.sh
é chamado pelo serviço udev e atinge o tempo limite, o que é um problema conhecido - nenhuma relação com o ZFS, apenas uma infeliz cadeia de eventos. O problema é conhecido há mais de dois anos e permanece sem correção nos drivers DisplayLink, embora vários empacotadores tenham hackeado em torno dele .Apliquei esse hack, ou seja, iniciando o
displaylink-driver
serviço de dentro/opt/displaylink/udev.sh
da seguinte forma:systemctl start --no-block displaylink-driver
Eu literalmente apenas adicionei o
--no-block
parâmetro. Isso resolve meu problema e a tela externa conectada à estação de acoplamento também funciona conforme o esperado.