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.
![](https://www.angusyoung.org/wp-content/uploads/2020/12/change-host-example-1024x766.png)
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.
![](https://www.angusyoung.org/wp-content/uploads/2020/12/shortcut-gnome-2-1024x723.png)
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.