Openbox zastępuje konfigurację xmodmap

9

Konfiguruję openbox na moim laptopie z systemem Linux Mint 13. Chcę, aby mój klawisz Caps Lock działał jako dodatkowy klawisz kontrolny. Wymagane ustawienia umieściłem w ~/.Xmodmappliku i sprawdziłem, uruchamiając

xmodmap ~/.Xmodmap

Działa poprawnie.

Jednak po ponownym zalogowaniu się do sesji Openbox te kluczowe zmiany nie są obecne. Uruchomienie powyższego xmodmappolecenia powoduje jego ponowne uruchomienie, ale chcę, aby stało się to automatycznie podczas uruchamiania.

Co ciekawe, zenitydo mojego ~/.config/openbox/autostartpliku dodałem polecenie testowe

zenity --info --text=Hello

Powoduje to powstanie małego okna dialogowego i wychodzi z niego dopiero po jego zamknięciu.

Teraz, kiedy ponownie loguję się do sesji openbox, Caps Lock działa jak klawisz Ctrl, dopóki okno dialogowe zenity nie zostanie zamknięte. Po zamknięciu tego okna Caps Lock powraca do swojego domyślnego zachowania.

Nie znalazłem nic na ten temat w Google, więc proszę o pomoc tutaj. Czy macie jakieś pomysły na to, co może pójść nie tak?

Aktualizacja:

Próbowałem to rozgryźć i w swoich eksperymentach skopiowałem /usr/bin/xmodmapplik /usr/bin/xmodmap_i zastąpiłem /usr/bin/xmodmapgo następującym skryptem bash

#!/bin/bash

{
    echo '-------'
    date
    echo xmodmap "$@"
} >> ~/xmodmap-calls

exec /usr/bin/xmodmap_ "$@"

Tak więc, za każdym razem, gdy uruchamia się jakiś cholerny skrypt w systemie xmodmap, poznaję go.

Dzięki temu ponownie się loguję i znajduję tylko jeden wpis w moim ~/xmodmap-callspliku, który jest tym ~/.Xmodmap, który uruchamia mój , co jest oczekiwane. Uznałem, że to nie xmodmapnadpisuje moich zmian.

Następnie trochę googlingu wprowadziło mnie do setxkbmappolecenia, które najwyraźniej może zrobić to samo. Zastąpiłem również ten plik wykonywalny, podobny do powyższego xmodmap. I dostałem polecenie winowajcy!

setxkbmap -option terminate:ctrl_alt_bksp

Nie mam absolutnie pojęcia, co to robi, ale po uruchomieniu xmodmap ~/.Xmodmap(który poprawnie zastosował moje ustawienia), jeśli uruchomię powyższe polecenie, moje zmiany zostaną zresetowane! Edycja : To okazuje się naprawdę śmieszne. Po prostu setxkbmappolecenie bez żadnych argumentów, na szczęście nadpisuje moje zmiany xmodmap ~/.Xmodmappoleceniem.

Teraz mam dwie rzeczy do zrozumienia, skąd to się bierze setxkbmapi dlaczego i jak to naprawić. Nadal prowadzę dochodzenie, ale mogę poważnie skorzystać z pomocy :)

Aktualizacja 2

Do diabła z xmodmap. Nie mogę ustalić, skąd setxkbmapjest wywoływany, ale wymyśliłem sposób użycia setxkbmappolecenia, aby mój Caps Lock zachowywał się jak Ctrl.

setxkbmap -option ctrl:nocaps

Tuż przed uruchomieniem openbox. Działa świetnie. Klawisz Caps Lock działa jak klawisz Ctrl. xmodmapnigdy nie jest uruchamiany.

Pozostawię to pytanie otwarte, aby ktoś, kto wie o tych rzeczach, mógł uzyskać wgląd. Również dla osób, które stoją za mną :)

Aktualizacja 3

Oto zawartość mojej .config/openbox/autostart, zgodnie z prośbą Pedrosaurio.

#!/bin/bash

# Set the wallpaper.
feh --bg-scale /wall.png

# Set default brightness.
xbacklight -time 1 '=40'

# Compositing.
xcompmgr &

# The panel.
tint2 &

# Start a terminal too.
roxterm &

O ile wiem, nie ma to nic wspólnego z klawiaturą. Oto skrypt, który rozpoczyna moją sesję: (uruchamiany przez lightdm)

#!/bin/bash

setxkbmap -option ctrl:nocaps

exec openbox-session
Shrikant Sharat
źródło
prawdopodobnie używasz jakiejś konfiguracji klawiatury, np. wybierz układ klawiatury lub coś podobnego, co odwraca wprowadzone zmiany
Ulrich Dangel
Jedynym innym miejscem, w którym majstrowałem przy konfiguracji klawiatury, jest okno preferencji układu klawiatury GUI, w którym zmieniłem klawisz Caps Lock, aby zachowywał się jak dodatkowy klawisz Ctrl. Działa to dobrze, w cynamonowym DE, mój lock caps działa jak ctrl nawet po ponownym logowaniu. Myślę, że ta konfiguracja była tylko cynamonowa, ale nie jestem pewien.
Shrikant Sharat
jak dodajesz polecenie w skrypcie autostartu?
pedrosaurio
Czy możesz opublikować swój autostartplik?
pedrosaurio

Odpowiedzi:

1

Miałem podobny problem. Okazało się, że było to spowodowane przez ibus. Po prostu go odinstalowałem, ponieważ nie potrzebuję jego usług.

Znalazłem winowajcę, używając twojej sztuczki polegającej na zamianie setxkbmap na skrypt, ale dodałem również, ps -AF --forestaby zidentyfikować osobę wywołującą setxkbmap.

gobenji
źródło
0

Nie znając skryptu autostartu, założę się, że nie używasz właściwej składni, pozwalając na uruchamianie poleceń w tle za pomocą ampersand ( &).

Spróbuj edytować .config/openbox/autostartplik, aby wyglądał tak:

# Run the system-wide support stuff
#. $GLOBALAUTOSTART
# Programs to launch at startup
# Programs that will run after Openbox has started
(sleep 1 && xmodmap ~/.Xmodmap ) &

W razie wątpliwości zajrzyj na wiki openbox i zobacz, jak wyglądają wszystkie przykłady &po każdym wpisie.

http://openbox.org/wiki/Help:Autostart

pedrosaurio
źródło
Mój plik autostartu jest pusty. W pewnym momencie miałem xmodmap ~/.Xmodmapw tym pliku (bez &, nie wydaje się konieczne). I zostały wywołanie xmodmap(i teraz setxkbmap) w scenariuszu, że zaczynam sesji Openbox. Tuż przed uruchomieniem exec openbox-sessionuruchamiam setxkbmappolecenie.
Shrikant Sharat
Dodanie sleep 1opóźnienia, aby xmodmapzastosować zmiany po tym, jak ładuje się wszystko inne, choć działa przez większość czasu, nie sprawia, że ​​jestem zbyt pewny rozwiązania. Wolałbym tego nie robić, jeśli mam alternatywy.
Shrikant Sharat
Można oczywiście uniknąć wszystkich komentarzy i sleeppolecenia, jednak &jest to konieczne po każdym wpisie, w przeciwnym razie wszystkie programy po pierwszym wpisie w ogóle nie będą działać.
pedrosaurio
Tak, jeśli jest to długo działająca aplikacja / proces, brak dodania &spowoduje zablokowanie. Użyłem tego zachowania z zenitypoleceniem, aby stwierdzić, że moje xmodmapzmiany są zastępowane po autostart zakończeniu. Mój autostart rośnie teraz i za chwilę go wkleję. Nie ma to jednak nic wspólnego z klawiaturą.
Shrikant Sharat
I bez polecenia uśpienia zmiany wprowadzone przez xmodmapsą zastępowane, gdy tylko plik autostartu zostanie zakończony.
Shrikant Sharat