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 / 423264
Accepted
Gilles Quenot
Gilles Quenot
Asked: 2018-02-11 10:09:21 +0800 CST2018-02-11 10:09:21 +0800 CST 2018-02-11 10:09:21 +0800 CST

Não há mais atalhos de teclado possíveis com base na tecla 'super', também conhecida como 'janelas' em qualquer WM

  • 772

Desde =~ 2 anos, parece que não podemos usar a Supertecla (também conhecida como tecla do Windows) para executar alguns atalhos de teclado.

Eu tento com kde, gnome, xfce4, nenhum funciona totalmente.

Por exemplo, eu tenho um atalho de teclado para digitar a data como se eu digitasse atribuído via Super+ a, quando eu bato nessas teclas, nada acontece.

A linha de comando está bash -c 'xvkbd -xsendevent -text $(date +%Y%m%d)'configurada corretamente nas preferências do xfce4.

Atualmente uso archlinux x86_64, com kernel 4.15.1-2-ARCH.

Alguém sabe o que há de errado? Onde ? Existe uma correção? Uma solução alternativa?

keyboard-shortcuts xorg
  • 1 1 respostas
  • 1215 Views

1 respostas

  • Voted
  1. Best Answer
    Fox
    2018-02-11T10:26:55+08:002018-02-11T10:26:55+08:00

    O atalho de tecla usado não é o problema

    Você pode verificar se o atalho de teclado está sendo definido com sucesso substituindo seu bash …comando por xterm(ou algum outro aplicativo gráfico). Se uma janela aparecer, seu atalho está definido corretamente. O problema é quase certamente o comando desejado:

    bash -c 'xvkbd -xsendevent -text $(date +%Y%m%d)'
    

    Na minha experiência, o uso de XSendEventnão é confiável. 1 Essa pode ser a origem do seu problema. Usar xdotoolum pode selecionar entre XTESTe XSendEvent, e o primeiro geralmente funciona para mim. Você xvkbdpode ter opções semelhantes.

    Ao enviar sequências de teclas, você precisa limpar os modificadores atuais para garantir que está enviando a sequência desejada (por exemplo , teste não Super+ t, Super+ e, etc.)

    Além disso, xdotoolpelo menos tem um comportamento estranho onde, se enviar eventos muito cedo, eles desaparecem. 2 Isso pode ser, de fato, os eventos de queda do servidor X ou pode ser algo totalmente diferente. De qualquer forma, você pode contornar isso (pelo menos em xdotool) com um atraso:

    xdotool sleep 0.125 type --clearmodifiers 'string to type'
    

    O typesubcomando tem uma --delayopção caso o atraso inicial não seja suficiente para evitar a queda de eventos.

    Resumindo

    Eu usaria:

    bash -c 'xdotool sleep 0.125 type --clearmodifiers --delay 125 "$(date +%Y%m%d)"'
    

    para replicar o comportamento pretendido, embora os valores usados ​​para sleepe --delaypossam precisar de ajuste, dependendo da sua configuração.

    Outra opção possível

    Se você não se importa em destruir sua área de transferência, uma abordagem melhor pode ser enviar o atalho padrão para paste selection:

    bash -c 'printf "%s" "$(date +%Y%m%d)" | tee >(xsel -bi) | xsel -i; xdotool sleep 0.125 key --clearmodifiers shift+Insert'
    

    Isso usa xselpara colocar o texto desejado nas seleções CLIPBOARDe PRIMARY(já que ShiftInsertnão é consistente em qual deles ele usa). Em seguida, sintetiza a sequência de teclas para colar essa seleção. Como isso requer apenas dois pressionamentos de tecla sintetizados, é menos provável que descarte eventos do que o outro método.


    1 De xdotool(1):

    NOTAS DE ENVIO

    Se você está tentando enviar entrada de chave para uma janela específica e parece não estar funcionando, é provável que seu aplicativo esteja ignorando os eventos que o xdotool está gerando. Isso é bastante comum.

    Enviar pressionamentos de tecla para uma janela específica usa uma API diferente do que simplesmente digitar na janela ativa. Se você especificar 'xdotool type --window 12345 hello', o xdotool irá gerar eventos-chave e enviá-los diretamente para a janela 12345. No entanto, os servidores X11 definirão um sinalizador especial em todos os eventos gerados dessa maneira (consulte XEvent.xany.send_event em X11 manual). Muitos programas observam esse sinalizador e rejeitam esses eventos.

    É importante observar que, para eventos de tecla e mouse, usamos apenas XSendEvent quando uma janela específica é direcionada. Caso contrário, usamos XTEST.

    Alguns programas podem ser configurados para aceitar eventos mesmo que sejam gerados pelo xdotool. Procure a documentação do seu aplicativo para obter ajuda.

    Notas de aplicação específicas (do teste do autor):

    • O Firefox 3 parece ignorar todas as entradas quando não tem foco.
    • xterm pode ser configurado durante a execução com ctrl+clique esquerdo, 'Permitir SendEvents'
    • gnome-terminal parece aceitar a entrada gerada por padrão.

    2 Revisitarei essa resposta e expandirei esse ponto se souber exatamente por que esse é o caso.

    • 1

relate perguntas

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

  • "Erro: não é possível abrir a tela: :0" - executando aplicativos GUI como outro usuário

  • Excluir até o final da linha de comando no Vim

  • Como desativar a aceleração de hardware no Linux?

  • 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