Driver de engenharia reversa para teclado retroiluminado multicolorido em laptops Clevo

13

Aqui está a minha situação:

Recentemente, comprei um Sager NP9170 (o mesmo que o Clevo P170EM) e ele possui um teclado retroiluminado multicolorido. No Windows 7, você pode iniciar um aplicativo que permita alterar a cor da luz de fundo para várias cores (azul, verde, vermelho etc.).

Eu quero essa mesma funcionalidade no Linux. Não consegui encontrar nenhum software que faça isso, então acho que vou ter que escrever sozinho. Sou programador por profissão, mas não fiz muita programação de baixo nível e certamente nunca escrevi um driver de dispositivo, por isso fiquei pensando se alguém poderia responder a essas duas perguntas:

1) Já existe algum software que faça esse tipo de coisa? Eu olhei bastante, mas não encontrei nada aplicável.

2) Onde eu começaria tentando fazer engenharia reversa desse tipo de coisa? Artigos, tutoriais, livros úteis que possam ajudar?

E apenas para esclarecer: a luz de fundo já funciona, esse não é o problema. Eu só quero poder mudar a cor da luz de fundo. Essa funcionalidade é suportada pelo hardware. O laptop veio com o software Windows que faz isso e eu quero a mesma funcionalidade no Linux. Estou disposto a escrever esse software sozinho, só quero saber a melhor maneira de fazer isso.

Obrigado!

PopeJamal
fonte

Respostas:

9

Bem, como se vê, alguém realmente descobriu. Um enorme "Obrigado" a " klystron34 " nos fóruns do notebookreview.com. Confira o tópico do fórum para obter mais informações.

Nota: Até onde eu sei, isso funcionará para muitos / a maioria dos laptops baseados no Clevo P150EM e no P170EM. Isso foi verificado pessoalmente por mim em um Sager NP9170 no Ubuntu 12.04. Prossiga por sua conta e risco. Não sou responsável por qualquer dano que você possa causar ao fazer isso e por qualquer outra isenção de responsabilidade padrão da Internet. Prossiga por sua conta e risco. Agora para as coisas boas:

Primeiro, você precisa poder compilar um módulo do kernel, então atualize seus repositórios:

sudo apt-get update

Agora, instale o git, as ferramentas de construção e a fonte do kernel:

sudo apt-get install git build-essential linux-source

Agora crie um diretório de trabalho. Eu prefiro usar uma pasta "dev" localizada no meu diretório pessoal:

cd ˜
mkdir dev
cd dev

Agora, baixe a fonte do módulo do kernel:

git clone git://git.code.sf.net/p/clevo-wmi/code clevo-wmi-code

Entre no diretório com o código fonte:

cd clevo-wmi-code

"Crie" o módulo do kernel:

make

Agora você deve ter um arquivo chamado clevo_wmi.ko

Agora, vamos testar e ver se o módulo realmente funciona carregando o módulo:

sudo insmod /home/<your-username-here>/dev/clevo-wmi-code/clevo_wmi.ko

Se funcionou, agora você deve ter um novo diretório chamado:

/ sys / devices / platform / clevo_wmi / kbled

Mude para esse diretório:

cd /sys/devices/platform/clevo_wmi/kbled

Agora você deve poder alterar a cor da seção do meio do teclado executando o seguinte comando:

sudo su -c 'echo 100 > middle'

A seção do meio do teclado agora deve estar verde. Substitua middlepor leftou rightpara alterar a seção correspondente do teclado. Aqui está uma lista dos códigos de cores:

GRB (Green-Red-Blue)
000 - Off
111 - White
100 - Green
010 - Red
001 - Blue
110 - Yellow
011 - Purple
101 - Aqua

Para instalar este módulo do kernel permanentemente, copie-o no mesmo local que o restante dos módulos do kernel (NOTA: você provavelmente precisará executar esta etapa e a próxima etapa sempre que alterar o kernel):

sudo cp ~/dev/clevo-wmi-code/clevo_wmi.ko /lib/modules/`uname -r`/kernel/drivers/platform/x86/

Em seguida, faça isso (acho que reconstrói a lista de módulos do kernel):

sudo depmod -a

Em seguida, edite seu /etc/modulesarquivo e adicione esta linha ao final do arquivo:

clevo_wmi

Salve suas alterações em /etc/modules.

Agora, sempre que você reiniciar, o módulo deverá ser carregado e você poderá alterar a cor da luz de fundo do teclado. Descobrir como fazê-lo mudar de cor na reinicialização e lembrar a última configuração de cores é um exercício que cabe ao leitor. Verifique o docsdiretório no código fonte para obter instruções sobre como usar os recursos dinâmicos de alteração de cores.

Agradecemos novamente aos desenvolvedores que trabalharam duro para escrever este módulo do kernel!

PopeJamal
fonte
Estou encantado: D Obrigado. Seria ótimo se ele fosse incluído no kernel algum dia. BTW: existem maneiras padrão de expor isso à interface do usuário, para que o Unity ou outro WM possa usá-lo?
bcelary
1
A partir de 2017-dezembro, existem alguns modelos Clevo aos quais o driver ainda não oferece suporte. O random_fade e o random_flicker funcionam, mas definir determinadas seções do teclado para cores específicas não funciona.
Mutant Bob
0

Como você acessa essa funcionalidade?

Provavelmente, isso pode ser conseguido por alguns scripts inteligentes e funcionalidade de inicialização.

(No Windows, você provavelmente precisará escrever código em um modelo de memória exótico, permitindo acesso direto ao hardware, ou em vez disso, precisará escrever um driver (e API) para detectar e controlar o hardware.)


Como você seleciona suas preferências?

Em seguida, alguns scripts básicos (ou scripts de chamada de ícone) podem selecionar uma preferência de cor específica.

Se você usasse o Python, para uma GUI de front-end, também seria bastante simples.

david6
fonte
Obrigado pela sua resposta! O que estou procurando é: a) um link para algum software que eu perdi que já faz isso. b) algumas orientações sobre por onde começar para determinar mais sobre o teclado.
PopeJamal
Você precisa identificar o número da peça / marca para o componente de teclado ..
david6
0

Eu criei um script para mudar as cores usando o método acima por Pope. Você pode encontrá-lo aqui: pb aDWe9s6d (não tenho certeza se a formatação aqui funcionará de forma mais segura para copiar a partir daí)

#! /bin/bash
#changes keyboard colors
#Noah B.

#Prompt for root
[ "$UID" -eq 0 ] || exec sudo bash "$0" "$@"

off=000
white=111
green=100
red=010
blue=001
yellow=110
purple=011
aqua=101

left=$1
l_code=000
middle=$2
m_code=000
right=$3
r_code=000

#LEFT SIDE

if [ -z "$left" ]
then 
    echo "Enter desired color for the left side:
    (off/white/green/red/blue/yellow/purple/aqua)"
read -p "Color choice: " left
fi

eval "l_code=\$$left"

echo $l_code > /sys/devices/platform/clevo_wmi/kbled/left

#MIDDLE

if [ -z "$middle" ]
then
    echo "Enter desired color for the middle:
    (off/white/green/red/blue/yellow/purple/aqua)"
read -p "Color choice: " middle
fi

eval "m_code=\$$middle"

echo $m_code > /sys/devices/platform/clevo_wmi/kbled/middle

#RIGHT SIDE

if [ -z "$right" ]
then
    echo "Enter desired color for the right side:
    (off/white/green/red/blue/yellow/purple/aqua)"
read -p "Color choice: " right
fi

eval "r_code=\$$right"

echo $r_code > /sys/devices/platform/clevo_wmi/kbled/right
Noé
fonte