As teclas de função do teclado sempre acionam atalhos de mídia, independentemente de Fn ser pressionado
Recentemente comprei um teclado mecânico Varmilo VA109M . Funciona bem no Windows, mas parece confundir minha instalação do Ubuntu, pois as teclas de função F1-F12 aparecem sempre para ativar atalhos de mídia, independentemente de eu ter segurado a tecla modificadora Fn dedicada ou não. Por exemplo, F12 aumentará o volume do meu sistema se eu pressioná-lo sozinho e fará o mesmo se eu pressionar Fn+F12; não há como fazê-lo funcionar como uma tecla F12 normal. Isso está me causando problemas porque eu faço muita programação e muitos atalhos de IDE dependem das teclas de função padrão.
Tentei redefinir as configurações internas do teclado segurando Fn+Esc, mas isso não ajudou. Minha instalação do Windows na mesma máquina funciona perfeitamente bem com este teclado. Existe algo que eu possa fazer para tentar diagnosticar exatamente o que o Ubuntu está confundindo?
EDIT: lsusb
gera o seguinte:
Bus 001 Device 003: ID 05ac:024f Apple, Inc. Varmilo Keyboard
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x05ac Apple, Inc.
idProduct 0x024f
bcdDevice 1.00
iManufacturer 1
iProduct 2
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x005b
bNumInterfaces 3
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 350mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 1 Boot Interface Subclass
bInterfaceProtocol 1 Keyboard
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.10
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 75
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.10
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 85
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0010 1x 16 bytes
bInterval 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.10
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 33
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x04 EP 4 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Respostas
Isso tem solução!
Então, eu mesmo fiz algumas pesquisas sobre isso recentemente e, embora Jd3eBP esteja certo sobre o teclado fingir ser um teclado da Apple, na verdade é provavelmente um problema com o flash de Varmilo na fábrica.
Eles vendem uma versão do teclado para Mac que eu acho que difere apenas no firmware e na rotulagem, por padrão, acho que suporta o layout do Mac, também deve ser capaz de alternar para o "modo janelas", que provavelmente troca a ordem das teclas para o que você esperaria, ele se identifica como um teclado da Apple para que os Macs o tratem adequadamente.
No entanto, parece que talvez eles tenham acidentalmente atualizado esse firmware em todos os teclados, em vez de apenas nos do Mac, o que não é perceptível no Windows, pois ignora o id, mas no linux ativará o driver hid_apple.
Solução:
Vamos para a parte da resposta. Existem duas grandes opções para resolver isso, testei ambas e acabei achando a segunda bem melhor.
Altere o hid_apple para um modo em que ele trate as teclas de função normalmente, pois isso basicamente resolverá o problema. Você pode encontrar instruções aqui sobre como fazer isso, funcionará no Ubuntu também.https://wiki.archlinux.org/index.php/Apple_Keyboard#Function_keys_do_not_work.
Atualize novamente o teclado com o ID do produto e do fornecedor para que não seja detectado. Esta é sem dúvida a resposta certa, mas um pouco mais arriscada. Você pode obter os arquivos de firmware do site do fabricante aqui,https://en.varmilo.com/keyboardproscenium/Driverdownload, usando o download VA87M. O atualizador em si não funcionou (acho que precisava da localização chinesa instalada), então você pode usar o atualizador que foi fornecido para alguém aquihttps://www.reddit.com/r/Varmilo/comments/g4sabk/fn_lock_on_va87m/, usando o arquivo de firmware oficial da para uma boa medida. Se você não confia nisso, ouvi dizer que se você enviar um e-mail a Varmilo sobre o problema, eles fornecerão os arquivos necessários.
Esse atualizador funcionou no wine para mim depois de instalar o wine no site oficial. Isso apenas atualiza o ID do fornecedor e do produto para não aparecer como um teclado Apple, mas também remove a funcionalidade "mudar para o modo Windows/Mac" que não era usada na versão somente para Windows. Você provavelmente poderia atualizar o firmware do Mac para reverter ao comportamento antigo, se quiser, mas não testei isso.
Varmilo não faz USB direito. Evitar.
Em torno da WWW, pode ser visto que seus teclados relatam falsamente seus fabricantes como Apple (ID do fornecedor 05ac, conforme reivindicado pelo Varmilo VS109M e pelo Varmilo VA88M), Cypress (ID do fornecedor 04b4 , conforme reivindicado pelo Varmilo Z104M ), ROF Electronics ( ID do fornecedor ffff, conforme reivindicado por um Varmilo VA87M ), Nordic Semiconductor (ID do fornecedor 1915 , conforme reivindicado por um Varmilo VB87M ), Holtek e muito mais.
Isso é claramente errôneo e altamente problemático.
Se o dispositivo de hardware de alguém identifica seu fabricante (na enumeração de dispositivos de barramentos PCI, USB e outros) como Apple e seu produto como um teclado Apple específico, é perfeitamente legítimo que os sistemas operacionais o tratem como aquele teclado Apple . ID do fornecedor 05AC ID do produto 024F é o teclado de alumínio da Apple (EUA).
O problema aqui é que o VA109M não é esse teclado .
O teclado da Apple possui uma semântica especial e incomum para a Fntecla, que difere da maioria dos teclados. O driver de dispositivo Linux que é anexado aos teclados da Apple é hid_apple
, e que sabe lidar com a Fnchave especial da Apple com seu "uso" USB HID privado.
O VA109M não é um teclado da Apple. É um teclado Varmilo. Não funciona como um teclado da Apple. Ele não emite o "uso" USB HID especial da Apple para arquivos Fn. Como a maioria dos teclados , ele não fica Fnvisível via USB .
Portanto, dirigi-lo como o teclado da Apple que diz que é, não funciona .
- Uma correção ruim, que também não é trivial de implementar, é desabilitar ou remover o
hid_apple
driver do Linux. - Uma solução ruim é usar a
fnmode=2
opção para ohid_apple
driver inverter seu Fnestado de deslocamento. Isso pelo menos muda para a semântica dessas teclas sendo teclas de função em vez de teclas de controle de mídia/dispositivo. - A correção certa é comprar teclados de um fabricante que saiba como definir IDs de fornecedor corretamente, em vez de Varmilo.
Leitura adicional
- Vroomfondel (2020-06-17). udev: Teclado detectado incorretamente como Apple . Erro do Debian #963002.
Segundo o fabricante:https://en.varmilo.com/keyboardproscenium/subject_product_detailed?subjectid=221
SO Windows apenas, o macOS não suporta teclas de atalho. Se isso se referir à tecla de função, essa pode ser a resposta. Talvez o suporte ao macOS seja tão irregular quanto o suporte ao Linux.