AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 429835
Accepted
bwrabbit
bwrabbit
Asked: 2018-03-13 16:02:27 +0800 CST2018-03-13 16:02:27 +0800 CST 2018-03-13 16:02:27 +0800 CST

Mapeamentos de teclas avançados no Linux

  • 772

Estou usando o manjaro i3 e estou procurando renovar alguns dos mapeamentos de teclas que fiz. Atualmente, estou usando os comandos xcape, xmodmap e setxkbmap para remapear as seguintes chaves:

  1. tampas para controlar quando seguradas, escapar quando pressionadas
  2. trocar ponto e vírgula e dois pontos

Eu fiz isso com este script de configuração:

setxkbmap -option 'caps:ctrl_modifier'
xcape -e 'Caps_Lock=Escape'
xmodmap -e "keycode 47 = colon semicolon"

Gostaria de pedir ajuda ou conselho para as alterações adicionais que pretendo fazer, pois já quebrei meus mapeamentos de teclas e tive que reinstalar meu sistema operacional para voltar à estaca zero ao brincar com o remapeamento da tela de impressão listado abaixo. As alterações que pretendo fazer são as seguintes:

  1. print screen --> desabilitar ou usar como outra super tecla
  2. alt esquerdo --> tecla mode_switch
  3. tecla de escape --> til e backtick
  4. til original e carrapato de volta --> backspace
  5. backspace --> deletar
  6. desabilitar home, end, inserir, excluir chaves e mapeá-las para executar algum script
  7. mode_switch + h, j, k, l --> teclas de seta adicionais
  8. mode_switch + backspace --> home
  9. mode_switch + deletar --> fim

Quais ferramentas devo usar para realizar esses remapeamentos? Além disso, se alguém tiver alguns exemplos semelhantes que usaram no passado, isso também seria muito útil! Agradecemos antecipadamente por qualquer ajuda.

x11 xkb
  • 1 1 respostas
  • 3460 Views

1 respostas

  • Voted
  1. Best Answer
    shender
    2019-01-09T21:14:49+08:002019-01-09T21:14:49+08:00

    Confirmei todos os itens a seguir em um ThinkPad P1 executando Pop!_OS (um derivado do Ubuntu 18.10) no GNOME.

    Encontrando códigos-chave

    Execute xevem um terminal e comece a digitar. Há muitos dados, mas o que você procura geralmente é a segunda e terceira linha de um bloco após a palavra keycode:

    KeyRelease event, serial 37, synthetic NO, window 0x3c00001,
        root 0x1a5, subw 0x0, time 291165043, (404,446), root:(454,634),
        state 0x0, **keycode 107** (keysym 0xff67, Menu), same_screen YES,
        XLookupString gives 0 bytes:
        XFilterEvent returns: False
    
    

    Existem algumas teclas que xevnão imprimem um código de chave, como Print Screen. Para isso, você pode usar o grep no arquivo criado na próxima seção.

    Ferramentas necessárias

    xmodmap

    Despejando seus vínculos atuais

    Você pode imprimir os mapeamentos atuais para o padrão executando xmodmap -pke. Você economizará algumas dores de cabeça em potencial fazendo primeiro backup de seu xmodmaplayout em um arquivo:

    xmodmap -pke ~/.Xmodmap.orig
    

    Este arquivo também serve como uma referência fácil para onde as chaves estão, caso não apareçam em formato xev.

    cat ~/.Xmodmap | grep Print
    keycode 107 = Print Sys_Req Print Sys_Req
    

    Comando para alterar rapidamente uma ligação

    Você já sabe disso, mas só para reafirmar:

    xmodmap -e "keycode [number] = [keys...]"
    

    Isso religará temporariamente uma chave para sua sessão. Correr xmodmap -pke novamente refletirá essas mudanças.

    Sintaxe

    xmodmapusa colunas delimitadas por espaço para denotar os diferentes modificadores/modos para um arquivo keycode. Da esquerda para a direita são eles:

    • A chave sozinha
    • Shift + a tecla
    • Mode_switch + a chave
    • Mode_switch + shift + a tecla

    Por exemplo:

    xmodmap -e "44 = j J Down Next"
    

    Isso define a tecla "J" "j" sozinha, "J" quando pressionada com Shift, Seta para baixo quando pressionada com Mode_switch e Page Down quando pressionada com Mode_switch e Shift.

    Mode_switch

    Mode_switché um modificador genérico separado, semelhante a Shift. Acho que muitos teclados não vêm mais com uma tecla dedicada Mode_switch(AltGr), mas você pode configurar uma com xmodmap.

    # Set left Alt as Mode_switch
    xmodmap -e "keycode 108 = Mode_switch"
    

    Execute scripts com as configurações do GNOME ouxbindkeys

    Não conheço uma maneira de executar scripts arbitrários com xmodmap. Existem, no entanto, algumas maneiras fáceis.

    Da configuração do i3

    Os documentos do i3 têm exemplos de como usar as diretivas bindsym/ em seu arquivo.bindcode~/.config/i3/config

    bindcode 214 exec /home/you/some_script.sh
    

    Ainda não tenho o i3 configurado, não testei, mas é direto do manual do usuário. Acho que os códigos correspondem ao que você encontra em xmodmap& friends.

    GNOMO

    Confira Configurações > Dispositivos > Teclado > Atalhos de teclado . Clique em mais e adicione uma combinação de script/chave. Observe que você deve colocar o caminho completo (da raiz) para o script e garantir que seja executável.

    Captura de tela do painel de configurações do GNOME para atalhos de teclado

    Nos meus testes, o GNOME não permite que você use algumas teclas, como Home e End.

    xbindkeys

    xbindkeyspode interceptar qualquer pressionamento de tecla e executar um script.

    Veja também alguns exemplos de arquivo de configuração, execute xbindkeys --defaults > $HOME/.xbindkeysrce visualize o arquivo.

    Observe que não abrirá um terminal, apenas executará o arquivo em um processo.

    Seus exemplos

    Aqui estão os comandos reais para executar o que você deseja. Certifique-se de confirmar seus próprios códigos de chave, estes são exatamente o que eu tenho.

    Etapa 1: remapear comxmodmap

    # print screen --> use as another super key, print screen with Mode_switch
    # Note: On GNOME, it appears Super_R doesn't work the same as Super_L
    xmodmap -e "keycode 107 = Super_L NoSymbol Print Sys_Req"
    
    # left alt --> mode_switch key
    xmodmap -e "keycode 64 = Mode_switch NoSymbol"
    
    # escape key --> tilde and backtick
    # Note: this can have unexpected consequences if you use `xcape` to map 
    # Control/Caps to send Escape when tapped. It will instead send `/~ when you 
    # press Caps Lock attempting to get Escape.
    # A solution might be to switch the keys around and use a non-op key as a 
    # placeholder, like in the xcape README
    # https://github.com/alols/xcape/blob/master/README.md#examples
    xmodmap -e "keycode 9 = grave asciitilde grave asciitilde"
    
    # original tild and back tick --> backspace
    xmodmap -e "keycode 49 = BackSpace"
    
    # backspace --> delete, and
    # mode_switch + backspace --> home
    xmodmap -e "keycode 22 = Delete NoSymbol Home"
    
    # mode_switch + delete --> end
    # Note: This won't work when combined with `xbindkeys`, since `xbindkeys`
    # hijacks the entire Delete key from X.
    xmodmap -e "keycode 119 = Delete NoSymbol End"
    
    # mode_switch + h, j, k, l --> additional arrow keys
    # Bonus: capital J/K are Page Down/Up, H/L are Home/End with Mode_switch + Shift
    xmodmap -e "keycode 43 = h H Left Home"
    xmodmap -e "keycode 44 = j J Down Next"
    xmodmap -e "keycode 45 = k K Up Prior"
    xmodmap -e "keycode 46 = l L Right End"
    
    

    Etapa 2: salvar alterações

    # Write current config to a file
    xmodmap -pke > ~/.Xmodmap
    
    # Load the config into xmodmap
    xmodmap ~/.Xmodmap
    

    Adicionando o último comando acima ao seu ~/.profileou ~/.bash_profileirá carregá-lo sempre que você fizer login, supondo que você tenha uma configuração padrão. Para mim foi meio lento, você pode querer apenas adicionar todos os xmodmap -ecomandos manualmente.

    Etapa 3: definir vinculações para scripts personalizados comxbindkeys

    Certifique -se de que xbindkeysestá instalado e adicione isto ao seu ~/.xbindkeysrcarquivo:

    # disable home, end, insert, delete keys and map them to run some script, and
    "some-script-in-PATH"
      Home
    "some-script-in-PATH"
      End
    "some-script-in-PATH"
      Insert
    "some-script-in-PATH"
      Delete
    

    Em seguida, recarregue com xbindkeys -p.

    Etapa 4: não há etapa 4

    Leitura adicional

    Página Wiki do Emacs sobre remapeamento
    Página Wiki do Emacs no xmodmap
    Arch Wiki sobre o Xmodmap
    Mais sobre Mode_switch no StackExchange
    Uma solução mais abrangente e que exige muito esforço é apenas escrever seus próprios layouts de teclado .

    • 8

relate perguntas

  • Arch Linux: executando o VirtualBox (VM) sem um gerenciador de janelas

  • erro de falta de dois pontos xrdb

  • Tornar as coisas maiores sem alterar a resolução? [AMIGO]

  • O encaminhamento SSH X11 funciona apenas ao usar

  • Qual é a diferença entre as regras base e evdev xkb?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve