Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Prawie jak ALT+TAB: xrun

Jeśli masz już doświadczenie z uruchamianiem gier w GNU/Linuksie, mogłeś zauważyć pewien denerwujący szczegół. W większości z nich uruchomienie trybu pełnoekranowego wiąże się z niemożnością przełączania się z powrotem do pulpitu roboczego (na wzór ALT+TAB). Nie mam bladego pojęcia, dlaczego tak jest, być może wynika to z ograniczeń serwera X odpowiedzialnego za tryb graficzny w Linuksie. Dość irytująca niedogodność, ponieważ dość naturalna jest chęć przerwania rozgrywki od czasu do czasu, by skorzystać z innej aplikacji - np. w celu sprawdzenia nowej wiadomości lub przeczytania solucji gry w sieci. Nonsensem byłoby wyłączanie za każdym razem gry, aby to uczynić. Na szczęście jest na to sposób.

Rozwiązanie problemu znalazłem na niezawodnej ArchWiki, czyli anglojęzycznej wikii dystrybucji ArchLinux (którą polecam na przyszłość w wypadku problemów z... Praktycznie czymkolwiek). Jest nim prosty skrypt umożliwiający uruchomienie dowolnej aplikacji w nowym ekranie X-ów.

Nasz system (historycznie stojący przecież na ramionach Uniksa przeznaczonego do sieciowego użycia przez wielu użytkowników w tym samym momencie) na starcie uruchamia domyślnie kilka terminali (TTY), pomiędzy którymi możemy się przełączać poprzez wciśnięcie kombinacji CTRL+ALT+F1 do F12. Logowanie do X-ów ma zazwyczaj miejsce pod 7 (CTRL+ALT+F7), logi ze startu systemu są pod 1 (CTRL+ALT+F1), itd. To rozwiązanie ma kilka zalet, między innymi w wypadku, kiedy jakaś aplikacja zawiesi nam cały tryb graficzny umożliwia przejście do konsoli tekstowej i zabicie wadliwego procesu. Innym zastosowaniem jest logowanie się do systemu kilku użytkowników naraz bez konieczności wcześniejszego wylogowania poprzednich. Więcej na temat TTY i przełączania (po angielsku): How to switch between text and graphical consoles?

Jak nam to pomoże ze wspomnianym problemem gier na fullscreenie: taką grę uruchomimy na dodatkowym ekranie X-ów, w dowolnym momencie bez jej wyłączania przejdziemy do systemu dzięki kombinacji CTRL+ALT+F7, a potem powrócimy do gry używając CTRL+ALT+F8. Jak tego dokonać? W kilku prostych krokach.

1. Idziemy pod adres Running program in separate X display2. Kopiujemy cały skrypt bash z ramki
3. Uruchamiamy nasz notatnik (gedit/mousepad/kwrite/nano/vi) z prawami roota (su lub sudo)# gedit4. Wklejamy do środka skrypt
5. Zapisujemy jako xrun w /usr/bin/ lub /usr/local/bin/ (osobiście wybrałem drugą opcję)
6. Nadajemy prawa wykonywania skryptowi, np.# chmod +x /usr/local/bin/xrun7. Uruchamiamy naszą aplikację przy użyciu polecenia$ xrun aplikacjanp.$ xrun xonoticlub w folderze z grą:$ xrun ./AtomZombieSmasherz Wine też działa:$ xrun wine SeriousSam.exe

Od tej pory możemy się przełączać poprzez używanie CTRL+ALT+F1 do F12. Jeden problem mniej.

Uwagi:

- Skrypt do działania wymaga zainstalowanego zenity! Jeżeli go nie masz, zainstaluj np. poprzez# aptitude install zenity- Podane numery TTY, np. 7 czy 8 są jedynie numerami odpowiadającymi standardowym ustawieniom w większości popularnych dystrybucji. Domyślnie od 1 do 6 na starcie systemu uruchamione są konsole tekstowe, od 7 wzwyż graficzne (domyślnie tylko jedna, 7). Ponownie odsyłam do How to switch between text and graphical consoles?- Jeżeli masz problem 'user not authorized to run the X server', dodaj swojego użytkownika do grupy tty, np. poprzez edycję pliku /etc/group# gedit /etc/grouporaz edytuj plik /etc/X11/Xwrapper.config# gedit /etc/X11/Xwrapper.configzamieniającallowed_users=consolenaallowed_users=anybody 

linux porady gry

Komentarze

0 nowych
4lpha   9 #1 11.01.2013 21:39

Super! Przyznam szczerze, że nie gram często, więc tę niedogodność mogłem przełknąć. Ale denerwujące jest.
Leci do zakładek w przeglądarce :)

dragonn   10 #2 11.01.2013 22:05

Pomysłowe ;), mam tylko jedno pytanie - co jeżeli ustawimy inną rozdzielczość na dwóch różnych TTY - wydaje mi się że jest taka możliwość.

  #3 11.01.2013 22:57

Steam rozwiązał ten problem inaczej. Tam o dziwo można minimalizować gry pełnoekranowe.

AntyHaker   17 #4 11.01.2013 23:14

Nie udało się uzyskać deskryptora pliku wskazującego na konsolę
Will launch "/usr/bin/kadu " on tty, X display :1...

X: user not authorized to run the X server, aborting.
xset: unable to open display ":1"
xset: unable to open display ":1"
xset: unable to open display ":1"
xinit: giving up
xinit: unable to connect to X server: Connection refused
xinit: server error

Coś takiego mi zwraca, gdy chce uruchomić jakąś aplikację. Ktoś pomoże? antyhaker93@gmail.com - będę wdzięczny.

13Van13   3 #5 12.01.2013 01:12

@dragonn
Spokojnie wtedy działa, nie ma problemu, np. pulpit 1024x768, gra 800x600.

@silvax
Jaka dystrybucja? Dodaj swojego użytkownika do grupy tty - edytując plik /etc/group

13Van13   3 #6 12.01.2013 18:07

@Admc (niezalogowany)
Nowe Ubuntu? Z tego co wiem, tam z okazji Steama niedawno wydano związaną z tym poprawkę. No i jakiś czas temu Ryan Gordon (tak, ten od portowania gier na Linuksa) również zwrócił uwagę na to, żeby fullscreena implementować w oparciu o instrukcje menedżera okien, co niweluje problem.

dragonn   10 #7 12.01.2013 18:26

@13Van13 fajnie, to może jeszcze jedno pytanie - a co jak chcę odpalić jeden xserver na np TV a pulpit na ekranie wbudowanym? Pewnie się tak da, tylko zastanawiam się jak wtedy wygląda zarządzanie myszką/klawiaturą, pewnie trzeba się jakoś między nimi przełączać? Da się to jakoś zrealizować?

AntyHaker   17 #8 12.01.2013 19:51

@13Van13

Mint14 ;p Zaraz spróbuje twojej rady ;p

EDIT. Dalej nie działa ;<
EDIT2. Dzięki, działa ;*

Autor edytował komentarz.
13Van13   3 #9 12.01.2013 23:29

@dragonn
To inne zagadnienie, więc nie mam pojęcia.

@silvax
Poprawiam właśnie artykuł, przypomniałem sobie w czym rzecz. Zajrzyj na jego koniec do uwag.

kuba144   5 #10 13.01.2013 16:34

Dzięki, przyda się ;)

  #11 15.01.2013 17:23

U mnie (dystrybucja openSUSE 12.2) wywala taki komunikat:

/usr/bin/xrun: line 24: błąd składni przy nieoczekiwanym znaczniku `newline'
/usr/bin/xrun: line 24: `[ -z "$DISPLAY" ] || zenity --error --text="$1: No such executable!" 2>'

Co z tym fantem można zrobić?

13Van13   3 #12 17.01.2013 01:25

@bip (niezalogowany)
A zenity zainstalowałeś, jak sugerowałem w uwagach pod artykułem właściwym? :)

  #13 17.01.2013 09:24

Tak :-)
Eech, błąd był tak trywialny, że aż wtyd - po prostu wklejając do edytora nie zwróciłem uwagi, że zbyt długie wiersze zostały "połamane" - teraz jest dobrze wklejone, ale nie działa, mam podobny problem co kolega Silvax.
Na próbę uruchomiłem jako root i działa ale jako zwykły użytkownik już nie (oczywiście jest członkiem grupy tty) - pojawia się komunikat:

Will launch "/usr/bin/worldofpadman " on tty2, X display :1...

Fatal server error:
Cannot move old log file "/var/log/Xorg.1.log" to "/var/log/Xorg.1.log.old"

Please consult the The X.Org Foundation support
at http://wiki.x.org
for help.

xset: unable to open display ":1"
xset: unable to open display ":1"
xset: unable to open display ":1"
xinit: giving up
xinit: unable to connect to X server: Connection refused
xinit: server error

Wygląda na brak uprawnień, pytanie do jakiej grupy jeszcze zwykły użytkownik ma należeć (oprócz tty)?

13Van13   3 #14 18.01.2013 15:53

@bip (niezalogowany)
Zajrzyj z łaski swojej na koniec artykułu, tam jest wyjaśnione, co zrobić w przypadku braku uprawnień. Ale komunikat mówi co innego. "Cannot move old log file "/var/log/Xorg.1.log" to "/var/log/Xorg.1.log.old" Pogoogluj trochę, z łaski swojej.

  #15 19.01.2013 10:24

@13Van13

Zgodnie z Twoją radą ;-) pogooglałem i znalazłem rozwiązanie ze strony:
http://rumytaulu.wordpress.com/2008/06/19/cannot-move-old-log-file/

krótko pisząc, należy w konsoli wykonać jeszcze polecenie (jako root):
chmod +s /usr/bin/X11/Xorg