Walki z terminalami. Konsola w stylu quake’a.

24/05/2011 – 20:26

Dzisiejszy wpis jest z serii „co mnie ostatnio wkurzyło i co z tym zrobiłem”.
Zacznijmy od tego, że od dobrych kilku(nastu?) miesięcy, jako emulatora terminalu (konsoli; jak kto woli), używam URxvt. Jest to ulepszona wersji Rxvt, przede wszystkim z obsługą Unicode. Terminal ten prezentuje się u mnie następująco:

Kilka dni temu, coś mnie drgnęło. Dość porządnie zaczęło mnie irytować ciągłe szukanie okna URxvt, wśród dziesięciu lub więcej aktualnie otwartych okien programów. Zaczęło mnie nużyć nawet proste klikanie w „minimalizuj”. A jaka wściekłość mnie ogarniała gdy zapomniałem o uruchomionym już URxvt ze screenem na czele, uruchamiając przy tym kolejne okienka terminala, a potem szukając odpowiednich okienek konsoli. W końcu powiedziałem dosyć!

Rozwiązanie problemu wydawało się proste – powrócić do Yakuake. Pytanie tylko, czemu z niego zrezygnowałem? Za czasów Beryla (takie coś z czego powstał między innymi Compiz Fusion) i KDE >=3.5, Yakuake powodował u mnie crash X Servera. Przeszedłem na „Konsole” z KDE. Używałem go dopóki wydano wersję 4.0 KDE. Już od tej wersji, miałem problemy z czcionkami. Nie znoszę pogrubionej czcionki w terminalu, a Konsole z KDE 4.0 – mimo wyłączenia bolda – i tak wciskało mi go na siłę.

Od kilku dni próbowałem znowu powalczyć z Yakuake i Konsole (warto zaznaczyć, że oba te programy są składnikami KDE, przez co schematy kolorów konsoli w nich są takie same) – niestety bezskutecznie. Po wielu przejrzanych stronach, nie znalazłem żadnego obejścia problemu. Opisywana przeze mnie „niedogodność”, nadal widnieje jako bug na stronach KDE. Jak widać, nikt nie kwapi się do zmiany kilku linijek kodu w Konsole. Tak, paru linijek. Bug polega na tym, że nawet mimo wyłączenia pogrubionej czcionki w konfiguracji Konsole, terminal dalej będzie korzystał z bolda jeżeli uruchomiona w nim aplikacja, skrypt, whatever, będzie wymagał bolda. A tak być nie powinno.

Przestałem więc walczyć z Yakuake/Konsole i zabrałem się za samo URxvt. Wszakże, dlaczego by go nie zmusić do działania na tej samej zasadzie co Yakuake? Jak się okazało, instalując URxvt otrzymujemy gotowy skrypt Perla, do minimalizacji i przywołania okna URxvt za pomocą kombinacji klawiszy. Wystarczy uruchomić terminal w następujący sposób:

urxvt -pe kuake

Standardowo klawiszem aktywacji jest F10. Po jego wciśnięciu, jeżeli terminal jest zminimalizowany, okno zostanie przywołane. Jeżeli okienko będzie aktywne, zostanie zminimalizowane. Proste. Aby przypisać inny klawisz wystarczy uruchomić URxvt np. tak:

urxvt -pe 'kuake'

Proste. Ale, ale, ale… W KDE 4.x nie zdaje to u mnie egzaminu. Kwin, z którego korzystam, posiada tak zwaną ochronę przed zmianą aktywnego okna. Polega to na tym, że mając aktywne jakieś okienko, np.: Firefoksa, a inne okno, z jakiejkolwiek przyczyny, zostanie automatycznie aktywowane, to nie zasłoni ono aktualnego okna, lecz jedynie pojawi się powiadomienie na pasku zadań (lub czymś w tym stylu). Oczywiście próbowałem zmieniać wiele opcji konfiguracji danego okna/programu w KDE (w tym przypadku był to URxvt), niestety bezskutecznie. Swoją drogą, w tym momencie należy się wielki plus dla KDE, które umożliwia zmianę naprawdę pokaźnej liczby opcji dla danego okna/programu (z których codziennie korzystam, np.: w przypadku conky).

Doszedłem więc do tego, że skrypt Perla dla URxvt na KDE 4.x jest bezużyteczny (a nie mam zamiaru wyłączać ochrony przed zmianą aktywnego okna, gdyż jest to naprawdę przydatne i ułatwiające życia (poza URxvt; wyjątek potwierdza regułę)).

Jest więc kolejne wyjście z problemu. Wmctrl. Prosty, konsolowy programik pozwalający zarządzać statusem wszystkich uruchomionych okien. W przypadku chęci korzystania z wmctrl wystarczy napisać prosty skrypt i przypisać jego uruchamianie do jakiegoś klawisza na klawiaturze. Jeżeli w momencie uruchomienia skryptu, okno z URxvt będzie aktywne, zostanie zminimalizowane. Natomiast jeżeli będzie zminimalizowane, zostanie przywołane. Poniżej prezentuję przykładowy skrypt (źródło):

#!/bin/sh
quake_rxvt_wmclass=quake_urxvt

active_window_id=\
"$(xprop -root | sed -n -e '/^_NET_ACTIVE/s/^[[:print:]]\{40\}//p')"

# test: true if active window has WM_CLASS $quake_rxvt_wmclass
if xprop -id "$active_window_id" 2>/dev/null | \
grep -q '^WM_CLASS(STRING)[[:print:]]*'"$quake_rxvt_wmclass"
then
# hide active quake rxvt
wmctrl -i -r "$active_window_id" -b add,hidden
elif ! wmctrl -R $quake_rxvt_wmclass -x ; then
# use the wmctrl to both focus and raise quake terminal as well as
# test if it is already running; wmctrl returns nonzero/false if no matching
# window is found, so we have to start it
urxvt -name $quake_rxvt_wmclass &
fi

Aby korzystać ze skryptu, należy zainstalować z repozytorium wmctrl! Zaletą tego rozwiązania jest to, że w moim przypadku, na KDE 4.x, okno faktycznie zostanie przywołane, a nie rzuci ono tylko informacją na pasku zadań. Wada wmctrl? U mnie żadne okienko nie chce się zminimalizować. Niestety, jak pech to pech, nic nie chce działać. Błędny skrypt? A skądże. Chwilka na Google i okazuje się, że jest to kolejny na mojej drodze, niezałatany bug.

Co teraz? Nic, załamać się. Nie tędy jednak droga. Szukając rozwiań tych wszystkich problemów, natknąłem się na Yeahconsole. Program ten okazał się moim ostatecznym rozwiązaniem. Yeahconsole jest swego rodzaju nakładką na inne emulatory. Innymi słowy, uruchamiając go, uruchamiamy tak naprawdę inny terminal, wpakowany w okienko yeahconsole. Dzięki temu, mając już skonfigurowany np.: xterm czy urxvt, tak naprawdę nie musimy wiele grzebać w konfiguracji yeahconsole – wystarczy podpiąć np.: urxvt pod niego, określić wysokość i szerokość konsoli oraz przypisać klawisz do aktywacji. Proste prawda? A jakże! Oto jak prezentuje się u mnie Yeahconsole:

Praktycznie identycznie jak URxvt, prawda? Jedyna różnica jest taka, że Yeahconsole bardzo ładnie wyłania mi się z góry ekranu przy F12. Poza tym, nie ma również problemu aktywacji okna.

Konfigurację Yeahconsole należy umieścić w pliku ~/.Xdefaults, tak jak w przypadku URxvt. Jeżeli chcesz przetestować Yeahconsole, a nie chce Ci się bawić w żmudną konfigurację, skorzystaj z mojego .Xdefaults. Wystarczy, że zainstalujesz urxvt, yeahconsole i wrzucisz zawartość mojego .Xdefaults do swojego (a jeżeli nie masz, to po prostu skopiujesz plik).

Po niecałym tygodniu walki, mogę wreszcie odsapnąć i powiedzieć – udało się! Jestem bardzo zadowolony z Yeahconsole, gdyż nie muszę nawet babrać się z konfiguracją.

BTW, skoro już dobrnąłeś tutaj, przetestuj yeahconsole ;-).

  1. komentarze 4 dla “Walki z terminalami. Konsola w stylu quake’a.”

  2. tilda – Emulator terminala przypominający konsole gier typu first person shooter

    By Adam Ziaja on Wrz 30, 2011

  3. Niestety, brak mu takiej mnogości opcji konfiguracji co chociażby rxvt.

    By Kaka' on Wrz 30, 2011

  4. A mi prawie wszystko działa:/ tzn. po wciśnięciu F12 konsola nagle się pojawia, jakby znikąd (brzydko to wygląda) u góry; (natomiast chowa się płynnie). Natomiast jak wyłączę efekty Kwin to się płynnie pojawia i chowa.Może miałeś podobne problemy?

    By Dawid on Lis 4, 2011

  5. U mnie występuje identyczna sytuacja, w przypadku aktywnych efektów graficznych menadżera okien Kwin. Osobiście mi to nie przeszkadza, dlatego nic z tym dotąd nie robiłem.

    By Kaka' on Lis 4, 2011

Napisz komentarz