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

Back to top