Emitir com vários mapas de teclado ao despertar da suspensão

0

Tentando xmodmap este arquivo .Xmodmap após a retomada. Tentei como executar um comando após o resumo da suspensão? adicionando múltiplos mapeamentos de chaves usando xmodmap -e sem sucesso (cada vez que aceitaria apenas a primeira linha). Eu sinto que deveria ser capaz de usar o .Xmodmap para manter o código simples. Ubuntu 14.04. Obrigado.

Meu .Xmodmap (com permissão executável) em / home / dadtwo /

clear control
clear mod4

keycode 133 = Control_L NoSymbol Control_L
keycode 37 = Super_L NoSymbol Super_L

add control = Control_L
add mod4 = Super_L

Meu 10_keyboard-swap (com permissão executável) está localizado em /etc/pm/sleep.d

#!/bin/sh

# Remap Swap Super_L and Control_L

case "${1}" in
    resume|thaw)
    DISPLAY=:0.0 ; export DISPLAY
    su $dadtwo -c "sleep 3; /usr/bin/xmodmap /home/dadtwo/.Xmodmap"&
;;
esac

/var/log/pm-suspend.log diz "/ usr / bin / xmodmap: não é possível abrir a exibição ': 0.0'"

    
por Seek Truth 04.08.2016 / 16:55

1 resposta

0

ldd $(type -p xmodmap) mostra que xmodmap usa libX11.so.6 para se comunicar com o servidor X. Portanto, não é possível usar xmodmap antes de o servidor X estar em execução.

$ ldd $(type -p xmodmap)
    linux-vdso.so.1 =>  (0x00007ffc5c1f3000)
    libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f8abffa6000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8abfbe1000)
    libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f8abf9c2000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8abf7be000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f8ac02db000)
    libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f8abf5ba000)
    libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f8abf3b4000)

No meu Ubuntu 14.04.5, (YMMV), usando pgrep X e ps -fp$(pgrep X) e seguindo o campo PPID de volta, vejo:

$ ps -fp1851,1801,1603
UID        PID  PPID  C STIME TTY          TIME CMD
root      1603     1  0 Jul27 ?        00:00:00 gdm
root      1801  1603  0 Jul27 ?        00:00:00 /usr/lib/gdm/gdm-simple-slave --display-id /org/gnome/DisplayManager/Displays/_0
root      1851  1801  1 Jul27 tty7     04:30:37 /usr/bin/X :0 -background none -verbose -logverbose 7 -core -auth /var/run/gdm/auth-for-gdm-ZKZ4jH/database -seat seat0 -nolisten t

O que me diz que o servidor X ( X ), PID 1851 (no meu sistema, neste momento, YMMV) foi iniciado pelo PID 1801 ( /usr/lib/gdm/gdm-simple-slave ), que, por sua vez, foi iniciado pelo PID 1603 (%código%).

gdm inicia somente gdm (que inicia gdm-simple-slave ) DEPOIS de você fazer login, isso não funcionará antes do login.

Executando X antes de xmodmap ser iniciado, ou sem colocar X em seu script antes do export DISPLAY=:0 , E ter feito xmodmap em sua sessão X.

Resposta reformulada:

Leia man xhost;xhost +local: .

Depois de ter logado, abra uma janela de terminal e olhe:

$ echo $DISPLAY
:0

Permitir que os processos em execução neste sistema, mas NÃO em execução no processo man xhost server, comuniquem-se com o processo X server:

$ xhost +local:
non-network local connections being added to access control list

Isso durará até que você o altere de volta ( X ) OU até que o servidor xhost -local: seja encerrado, portanto, se isso funcionar para você, coloque-o na inicialização de seu usuário em algum lugar.

Enquanto X estiver em vigor, você poderá executar seu xhost +locakl: em qualquer contexto (por exemplo, de xmodmap ) fazendo:

env DISPLAY=:0 xmodmap ....

ou, se você quiser usar vários comandos /etc/pm/power.d/ ,

export DISPLAY=:0
xmodmap ...
xmodmap ...

Observação: Permitir conexões com o seu servidor xmodmap por "conexões locais que não são de rede" torna seu sistema menos seguro.

    
por waltinator 06.08.2016 / 03:21