Faceți căutări pe acest blog

sâmbătă, 5 iulie 2014

Sesiuni multiple X

 Putem deschide noi sesiuni ale interfeței grafice. În KDE avem această posibilitate în meniu- Pleacă- Sesiune- Comută utilizatorul . Posibil ca și alte interfețe grafice să ofere acest lucru.


 Tot în KDE putem porni o nouă sesiune cu ajutorul KDM (Kde Display Manager), dând în konsole, yakuake (deci un emulator de terminal din interfața grafică) sau tty comanda:
kdmctl reserve
 Astfel primim fereastra de logare kdm în care trecem numele utilizatorului și parola acestuia.

 Putem deschide o nouă sesiune a X din terminal, fie el tty sau un emulator gen konsole,  xfce4-terminal, lxterminal, șamd folosind xinit/ startx:
xinit -- :1
startx -- :1

 Implicit interfața grafică este pornită în display-ul 0 (zero), comenzile anterioare precizează ca următoarea sesiune să fie deschisă în display-ul 1, încă una va fi pornită în display 2 (xinit -- :2), etc.
 Putem chiar continua cu altă sesiune a X în alt display:
xinit -- :3
...
xinit -- :6

 După deschiderea noii sesiuni vom fi direcționați în ecranul noi sesiuni, putem schimba între sesiuni cu combinația de taste Ctrl+Alt+Fn, similar cu ajungerea într-un terminal tty, sesiunea inițială este în tty7, deci ajungem acolo apăsând Ctrl+Alt+F7). În funcție de unii factori (n-am studiat problema prea bine, mă lasă rece...) noile sesiuni se vor găsi în (să-i zic așa) tty8 (Ctr+Alt+F8)/ prima sesiune suplimentară, tty9 (Ctrl+Alt+F9)/ a doua sesiune suplimentară, șamd până la tty12 (Ctrl+Alt+F12), saaaaau... Sau în tty1, tty2, până la tty6 în funcție de numărul tty unde am dat comanda! Dacă rulăm xinit în tty3 acolo va fi pornită noua interfață grafică, dacă rulăm xinit în terminal în prima sesiune grafică (cea originală) va fi pornită în tty1, următoarea în tty2, șamd.
 Acum câțiva ani (pe alte distribuții ca Mandriva, Ubuntu) sesiunile porneau în tty8, tty9, etc, acum în tty1, tty2, etc, asta pe Arch, distribuția folosită în ultimii 3-4 ani. Ultima distribuție testată deschidea noile sesiuni în tty8, tty9, etc, mă refer la Slackware 14.1. În Rosa parcă sesiunea inițială era în tty1 iar cele suplimentare se deschideau în tty-ul de origine (dădeai startx -- :1 în tty4 acolo pornea noua sesiune Kde). Verificați pe distribuția folosită!
 Trebuie să înțelegeți că e ceva minor, diferența o constituie modul în care developerii/ maintainerii atribuie/ alocă/ numerotează displaiurile/ ecranele.
 Chiar și-n Arch, folosind kdmctl reserve noile sesiuni rulează în displayurile tty8, tty9, etc!


 Putem porni și numai o aplicație, nu neapărat tot mediul grafic cu:
xinit nume-aplicație -- :1
xinit /usr/bin/firefox -- :1
xinit /usr/bin/dolphin -- :2
xinit /usr/bin/kpat -- :3
 Este o chestie utilă pentru jocuri de exemplu, eu nu-s gamer, dar am înțeles că e ok din punct de vedere al resurselor și-al posibilității de-a folosi combinațiile de taste care în interfața grafică sunt reținute de aceasta.
 Trebuie reținut că nu veți putea închide acele aplicații folosind hotkey-urile tradiționale, Alt+F4 sau q sau Ctrl+q ci va trebui să le închideți din bara de meniuri sau din terminalul/ locația de unde a-și rulat xinit cu Ctrl+c.
 LE: o altă modalitate de-a rula jocuri într-un server X dedicat: http://forum.ubuntu.ro/viewtopic.php?id=13985

 Recunosc că nu-s un mare utilizator al acestei opțiuni, folosesc posibilitatea multisesiunii X pentru ”reclamă” Linux, așa pot arăta amicilor/ cunoștințelor capacitățile/ posibilitățile/ diferențele între interfețe grafice, aceștia pot vedea simultan la lucru Kde, Xfce, Lxde, Openbox.

 În cazul în care avem instalate mai multe DE-uri/ WM-uri trebuie să setăm fișierul de configurări al xinit corespunzător, aceste setări sunt necesare și pentru sesiuni diferite, un KDE sau 2-3, un Xfce4 sau mai multe, un Lxde,șamd. E posibil să avem 6 (șase) sesiuni suplimentare, corespunzând tty1- tty6 (după cum spuneam în cazul Arch) sau tty8- tty12 (cazul Slackware și dacă nu m-a lăsat complet memoria Mandriva, Ubuntu acum vreo 3-4 ani...).
 Ok, la obiect! Un fișier local de configurări al X (~/.xinitrc) valabil pentru o singură interfață grafică arată cam așa (liniile comentate se pot șterge, așa cred că vă faceți o idee clară):
#!/bin/sh
#
# ~/.xinitrc
#
# Executed by startx (run your window manager from here)

if [ -d /etc/X11/xinit/xinitrc.d ]; then
  for f in /etc/X11/xinit/xinitrc.d/*; do
    [ -x "$f" ] && . "$f"
  done
  unset f
fi

# exec gnome-session

exec startkde
# exec startxfce4
# exec wmaker
# exec icewm
# exec blackbox
# exec fluxbox
# exec openbox-session
# exec cinnamon-session
# ...or the Window Manager of your choice
#exec xterm


 După cum observați toate liniile sunt comentate (precedate de #) cu excepția liniei cu exec startkde, ceea ce face ca comanda xinit sau startx să pornească interfața Kde, dacă aș vrea să pornesc Xfce4 aș decomenta doar linia cu exec startxfce4, pentru Openbox aș decomenta doar linia cu exec openbox-session, șamd.

 Acum dacă avem mai multe interfețe și dorim să le putem porni după plac putem modifica .xinitrc în genul:
#!/bin/sh
#
# ~/.xinitrc
#
# Executed by startx (run your window manager from here)

if [ -d /etc/X11/xinit/xinitrc.d ]; then
        for f in /etc/X11/xinit/xinitrc.d/*; do
                [ -x "$f" ] && . "$f"
        done
        unset f
fi

# Here kde is kept as default
case $1 in
        xfce) exec startxfce4;;   
        lxde) exec startlxde;;    

        openbox) exec openbox-session;;
        kde);;
        *) exec startkde;;        
esac


 Implicit startx sau xinit vor porni Kde, pentru alt mediu grafic vom da comanda startxfce4, startlxde, etc pentru sesiunea de bază, prima pornită pe mașină, dacă Kde pornește direct și vrem o a doua sesiune comanda va fi de tipul:
strartxfce4 -- :1 
startlxde -- :2
openbox-session -- :3

 O altă posibilitate:
#!/bin/sh
#
# ~/.xinitrc
#
# Executed by startx (run your window manager from here)

if [ -d /etc/X11/xinit/xinitrc.d ]; then
        for f in /etc/X11/xinit/xinitrc.d/*; do
                [ -x "$f" ] && . "$f"
        done
        unset f
fi

# Here Xfce is kept as default
session=${1:-xfce}

case $session in
    awesome           ) exec awesome;;
    bspwm             ) exec bspwm;;
    catwm             ) exec catwm;;
    cinnamon          ) exec cinnamon-session;;
    dwm               ) exec dwm;;
    enlightenment     ) exec enlightenment_start;;
    ede               ) exec startede;;
    fluxbox           ) exec startfluxbox;;
    gnome             ) exec gnome-session;;
    gnome-classic     ) exec gnome-session --session=gnome-classic;;
    i3|i3wm           ) exec i3;;
    icewm             ) exec icewm-session;;
    jwm               ) exec jwm;;
    kde               ) exec startkde;;
    mate              ) exec mate-session;;
    monster|monsterwm ) exec monsterwm;;
    notion            ) exec notion;;
    openbox           ) exec openbox-session;;
    unity             ) exec unity;;
    xfce|xfce4        ) exec startxfce4;;
    xmonad            ) exec xmonad;;
    # No known session, try to run it as command
    *) exec $1;;
esac


 Iar pornirea interfețelor se va face cu:
xinit
xinit kde
xinit gnome
xinit unity
sau
startx 
startx ~/.xinitrc gnome
startx ~/.xinitrc kde
startx ~/.xinitrc wmaker

 

 PS1: dacă nu aveți configurat ~/.xinitrc puteți porni alte sesiuni doar cu startx -- :1, xinit va porni o sesiune xterm, un display negru c-o ferestră de terminal albă... Fuck, ce uram xtermul ăla când aveam 2-3 luni de utilizare Linux și-mi crăpa interfața... :D
 PS2: puteți porni alte sesiuni ale X și ca alți utilizatori în afară de userul implicit (cu condiția să aveți mai multe conturi de user), vă logați în tty ca alt user și porniți o nouă sesiune Kde, Xfce4 sau ce doriți și aveți instalat.
 PS3: în funcție de distribuția folosită e posibil ca dacă ați (sau e deja) modificat numărul de terminale tty (implicit sunt 6), se modifică în consecință și numărul de sesiuni X disponibile, cele două adunate fac 12, deci 8 tty active se traduce în 4 sesiuni X posibile în anumite situații. Sincer nu am testat prea mult, oricum 2, hai 3 sesiuni sunt suficiente pentru teste, și-n 99,99% din timp o sesiune e tot ce ne trebuie! Una și bună.
 Dar dacă ține cineva să testeze la maxim, o combinație între xinit și kdmctl ar trebui să vă ofere 12 sesiuni...

 Puteți verifica ce și câte sesiuni aveți pornite cu kdmctl list, w sau who. Bănuiesc că imaginea următoare e sugestivă, se văd userii logați, tty în care rulează sesiunile (vt8= tty8= Ctrl+Alt+F8), displayul setat odată cu comanda xinit (:0 e prima sesiune, primul display, e sesiunea implicită), interfața grafică ce rulează (kde-plasma e Kde, xfce4 este Xfce4). Asteriskul (*) indică sesiunea activă, cea în care suntem la momentul respectiv, t-ul de după tty3,vt3,shogun,,t indică o sesiune în tty.

 Închidem o sesiune din aceasta (Ieșire/ log out) sau dând în terminalul de origine Ctrl+c. Închiderea sistemului (shutdown, poweroff) din una din sesiuni le închide pe toate celelalte.


 Surse:
https://wiki.archlinux.org/index.php/Xinit
http://docs.kde.org/stable/en/kde-workspace/kdm/advanced-topics.html

6 comentarii:

  1. Folosesc xgame pentru jocuri intrun nou x server

    RăspundețiȘtergere
  2. OK, mulțumesc, am adăugat un link către acel tutorial în material.

    RăspundețiȘtergere
  3. Sunt curios daca in noua sesiune mai ai drepturi gen reboot, modificare conexiuni, etc. Pentru ca de cand cu systemd-logind, acesta poate sa urmareasca si sa acorde drepturile necesare doar sesiunii principale care ruleaza in tty1, nu tty7 ca in trecut. In Gentoo a trebuit sa scriu un fisier xserverrc care sa porneasca X in tty1 si astfel sa am drepturile necesare prin policykit. Altfel, X se incapatina sa porneasca in tty7 cum e obisnuit, iar eu nu aveam niciun drept.

    RăspundețiȘtergere
  4. P.S. in Arch xserverrc exista by default, iar X porneste in tty1...din cate imi aduc eu aminte. :P

    RăspundețiȘtergere
  5. This was changed in October 2012 during/after the migration to systemd/logind. According to a bug report, running the X server on a different tty than the active consolekit session caused things to break because the session on (for example) TTY7 would not be authenticated . Without logind, one could use ck-launch-session in ~/.xinitrc to get a new session for the X server. However, this didn't work anymore with logind, so /etc/X11/xinit/xserverrc was changed to just start the X server on the current tty.

    Dupa cum spuneam, systemd-logind poate sa urmareasca doar X din tty1.

    RăspundețiȘtergere
  6. Nu, în Arch X pornește implicit în tty7, asta pe un Arch instalat înainte de introducerea systemd, într-un Arch instalat acum cu systemd implicit nu știu.
    Și da, poți opri sau restarta sistemul dintr-o nouă sesiune, dar la repornire sistemul va porni cu acea sesiune, cel puțin dacă ai setată logarea automată în ultima sesiune, cazul meu... Deci te poți trezi în Lxde sau Xfce4 în loc de KDE.

    RăspundețiȘtergere

Back to top