Nessa postagem mostrarei como fazer um KVM-switch para Linux usando apenas software e um pouco de hardware compatível.
Para começar você precisa dos seguintes dispositivos:
- Um monitor compatível com o padrão DDC/CI (no meu caso, LG27UD59)
- Um teclado Logitech MX Keys (para outros dispositivos, veja os comentários no final)
- Um mouse Logitech MX Master 3 (para outros dispositivos, veja os comentários no final)
E dos seguintes softwares instalados: ddcutil e Solaar. A instalação deles no Fedora é bastante simples, já que eles estão nos repositórios oficiais do projeto:
sudo dnf install -y solaar ddcutil
Mouse e Teclado
É bem provável que você já tenha o Solaar instalado se você tem o teclado e o mouse da Logitech. De qualquer maneira, a documentação do projeto fornece os passos iniciais para configurar o Solaar, caso seja necessário.
Você pode inspecionar a configuração dos dispositivos usando o comando solaar show. Pessoalmente acho mais simples verificar na GUI do Solaar, já que ela também mostra quais os valores aceitáveis para o comando que usaremos adiante. A informação relevante para nós é a mostrada em “Change Host“. Ela mostra os nomes dos hosts com os quais seu dispositivo está pareado.
Usando as informações mostradas na UI, podemos usar a linha de comando para trocar o host ativo:
solaar config "MX Keys" change-host 1:mercury
Note que o nome do host tem que ser igual ao mostrado na UI e em alguns casos pode ser que somente o número do ID seja mostrado.
Repita o mesmo para o mouse, tomando cuidado de garantir que o ID utilizado é o ID do dispositivo, pois é possível que os eles sejam diferentes entre o mouse e o teclado (ex.: o host 1 do teclado é o host 2 do mouse, etc):
solaar config "MX Master 3" change-host 1:mercury
Monitor
Para controlar o monitor, usamos o programa ddcutil, que serve para interagir com o software do monitor através do conjunto de protocolos DDC-CI. Nesse link aqui, que serviu de referência pra implementar o controle do monitor, você encontra algumas dicas legais sobre o ddcutil.
O primeiro passo é detectar o monitor e ver quais as funcionalidades estão disponíveis:
sudo ddcutil detect
Em algumas distribuições pode ser necessário carregar o módulo i2c-dev. O Fedora já costuma fazer isso por padrão, então nenhum passo a mais é necessário. Se estiver usando outra distro, consulte a documentação.
Se executado com sucesso, o comando vai mostrar uma saída semelhante a esta aqui:
Display 1
I2C bus: /dev/i2c-2
EDID synopsis:
Mfg id: GSM
Model: LG Ultra HD
Serial number:
Manufacture year: 2017
EDID version: 1.3
VCP version: 2.1
Se você estiver usando um laptop, o comando também vai mostrar a informação do monitor embutido. Esse monitor embutido não é relevante para o KVM-switch virtual, portanto podemos ignorar as mensagens de erro referentes a ele.
A informação relevante mostrada pelo comando acima é o I2C bus. Mais especificamente, o número do bus (2, no caso de /dev/i2c-2). Tendo a informação do bus, podemos usa-la para descobrir as funcionalidades do monitor. Para o KVM-switch estamos interessados na funcionalidade “Input Source“. Podemos usar o seguinte comando para descobrir o ID da feature e os valores aceitáveis para configura-la.
sudo ddcutil capabilities --bus=2 | grep -A 5 "Input Source"
Feature: 60 (Input Source)
Values:
11: HDMI-1
12: HDMI-2
0f: DisplayPort-1
10: DisplayPort-2
Isso nos mostra que para mudar o dispositivo de entrada do monitor, podemos usar a feature ID 60 usando os valores (em hexadecimal) 0x11, 0x12, 0x0f e 0x10. Para testar, nesse caso:
sudo ddcutil --bus=2 setvcp 60 0x0f &
Executando esse comando já é possível trocar a entrada do monitor usando apenas a linha de comando.
Finalizando e Integrando no Gnome
Tendo em mãos os comandos para mudar o mouse, teclado e monitor. Podemos colocar tudo isso num script:
sudo ddcutil --bus=2 setvcp 60 0x0f &
solaar config "MX Keys" change-host 2
solaar config "MX Master 3" change-host 2
Repita o processo para outros hosts do seu KVM-switch virtual (ex.: micro 1, micro 2, etc). Não esqueça de dar permissão de execução nos scripts.
Por fim, podemos criar atalhos de teclado no Gnome para que execute esses scripts.
Como funciona?
No meu caso eu configurei os atalhos Ctrl+F2 para alternar para o laptop do trabalho e Ctrl+F3 para alternar para o laptop pessoal.
Obs.:
- Imagino que funciona com qualquer teclado Logitech com suporte a múltiplos dispositivos (tipo o K810), mas eu não testei.
- Assim como o teclado, acredito que deve funcionar com outros mouses com suporte a múltiplos dispositivos, tipo o Logitech M720 Triathlon.
- É possível usar o ddcutil sem sudo e o artigo de referência mostra como fazer isso, porém fiz isso aqui.