Portál AbcLinuxu, 2. května 2025 05:30

X server na volenej virtuálnej konzole

3.5.2009 17:33 | Přečteno: 1465× | Skripty | Výběrový blog

Môj domáci desktop používame dvaja. Každý si spúšťa vlastný X server a má vlastné nastavenia a nezávislosť na druhom. Pri spustení musí zadávať číslo displaya a problém nastáva aj pri vzdialenom pripájaní sa na vlastný X server a nejasné umiestnenie X servera na virtuálnej konzole, kde poradie nie je pevne dané, ale zaleží od poradia spustenia. Takže je čas na skript, ktorý to bude pri štarte riešiť automaticky.

Aby pri prepínaní medzi virtálnymi konzolami nebolo nutné postupne stláčať Ctrl+Alt+F7, Ctrl+Alt+F8 (prípadne ešte ďalej) a čakať pár sekúnd, kým sa prepne konzola a monitor, tak si každý užívateľ si v domovskom adresári vytvorí súbor .Xplacing, do ktorého si môže nadefinovať preferované číslo X displaya a číslo virtuálnej konzole, na ktorej má server bežať. Formát súboru je jednoduchý, názov a hodnota:
$ cat ~/.Xplacing
# komentar
disp :2
vt 08
Zvolené číslo displaya a konzole už môžu byť obsadené, v tom prípade sa vyberú prvé voľné.
#!/bin/bash

# spusti X server na preferovanom alebo na 1. volnom displayi a konzole

# uzivatelsky konfiguracny file
XCONFILE=~/.Xplacing

shopt -s extglob

usedvt() {
    LC_ALL=C ls -la --color=none /dev/tty{?,??} |
    sed -rn '/users/s%.*/dev/tty([0-9]+)$%\1%p'    |
    tr -d \\n
}

if [[ -r "$XCONFILE" ]] ; then
    while read name val; do
        case "$name" in
        '#'*) #comment
            ;;
        disp) if [[ "$val" == +([0-9]) || "$val" == :+([0-9]) ]]; then
                if [[ -f "/tmp/.X${val#:}-lock" ]]; then
                    echo "Preferred X server is not free. Finding another free."
                    disp=
                else
                    disp="${val#:}"
                fi
            else
                echo "Unrecognized preferred X server \`$val'. Finding another free."
                disp=
            fi
            ;;
        vt) if [[ "$val" = +([0-9]) ]]; then
                uvt=`usedvt`
                if [[ "$val" == [$uvt] || "$val" == 0[$uvt] ]]; then
                    echo "Preferred virtual terminal is not free. Finding another free."
                    vt=
                else
                    vt="$val"
                fi
            else
                echo "Unrecognized preferred virtual terminal \`$val'. Finding another free."
                vt=
            fi
            ;;
        esac
    done <"$XCONFILE"
fi

if [[ -z "$disp" ]]; then
    for ((d=0; d<15; d++)); do
        if [[ ! -f "/tmp/.X$d-lock" ]]; then
            disp="$d"
            break
        fi
    done
fi

startx -- ":$disp" ${vt:+vt$vt}
Uložiť napríklad ako /usr/local/bin/sx, nastaviť práva na spustenie a hurá.

Spôsob zisťovania aktívnych X serverov (hľadaním súborov /tmp/.X*-lock) a obsadených konzolí (zisťovaním vlastníka súborov /dev/tty*) nie je veľmi kóšer a asi ani veľmi prenositeľný na inú implementáciu X window system, ale používa niekto z vás niečo iné ako Xorg na stroji, kde sa delí o monitor s niekym iným?. k máte iný jednoduchý a neotravný spôsob, rád sa poučím.        

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

3.5.2009 19:45 CEST
Rozbalit Rozbalit vše Re: X server na volenej virtuálnej konzole
Odpovědět | Sbalit | Link | Blokovat | Admin

/etc/X11/gdm/custom.conf problem neresi?

[servers]
0=Standard
1=Standard
4.5.2009 01:00 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: X server na volenej virtuálnej konzole
Na [kgx]dm som sa neodhodlal, pretoze nvidia-blob driver obcas blbol (zostrelil oba Xservery) pri prepinani sa medzi beziacimi Xservermi. Takze som si vravel, ze este to komplikovat ?dm...

Uz len tie podivne optiony pre nvidiu, aby to nepadalo hovoria sami za seba, ze to nieje velmi testovany testcase v Nvidii:
Option   "GlyphCache"             "1"
Option   "InitialPixmapPlacement" "2"
Aj ked musim uznat, ze s tymi optionami spadol (uvedenym sposobom) asi iba raz za posledne 3 mesiace.
If you hold a Unix shell up to your ear, you can you hear the C.
Marián Kyral avatar 5.5.2009 07:26 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
Rozbalit Rozbalit vše Re: X server na volenej virtuálnej konzole

Záleží co používáš za verzi. Už dost dlouho nejsou tyhle volby potřeba (jsou nastavené automaticky). Problémy s padáním nvidia ovladačů jsem vyřešil zakomenováním všech speciálních voleb v xorg.conf. Od té doby vše funguje jak má. Každý si pustí novou session a nemusí se starat kde právě je. Přepínání mezi sessions naprosto bez problémů.

$ eix nvidia-drivers -Ic
[I] x11-drivers/nvidia-drivers (180.51@20.4.2009): NVIDIA X11 driver and GLX libraries
5.5.2009 11:39 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: X server na volenej virtuálnej konzole
"Dost dlouho" je (ak si dobre pamatam) iba par mesiacov. Alee vyskusal som prave zakomentoval vsetky spec. optiony a zda sa ze to chodi. Tak uvidim.
If you hold a Unix shell up to your ear, you can you hear the C.
Grunt avatar 3.5.2009 19:52 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
Rozbalit Rozbalit vše Re: X server na volenej virtuálnej konzole
Odpovědět | Sbalit | Link | Blokovat | Admin

Co to? Multi-seat?

Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
thingie avatar 3.5.2009 21:06 thingie | skóre: 8
Rozbalit Rozbalit vše Re: X server na volenej virtuálnej konzole
Odpovědět | Sbalit | Link | Blokovat | Admin
€ ck-list-sessions 
Session2:
        unix-user = '501'
        realname = 'Honza 'thingie' Bartoš'
        seat = 'Seat1'
        session-type = ''
        active = TRUE
        x11-display = ':0'
        x11-display-device = '/dev/tty1'
        display-device = ''
        remote-host-name = ''
        is-local = TRUE
        on-since = '2009-05-03T09:54:16.417463Z'
        login-session-id = '1'
Je tu třeba tenhle krám. Nicméně jako už potřeba mít na stejném počítači pro různé lidi úplně jiné zvlášť spouštěné X servery proklatě dost smrdí.
Růžové lži.
3.5.2009 21:40 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: X server na volenej virtuálnej konzole
Cim by to malo smrdiet?
If you hold a Unix shell up to your ear, you can you hear the C.
thingie avatar 3.5.2009 22:03 thingie | skóre: 8
Rozbalit Rozbalit vše Re: X server na volenej virtuálnej konzole
No, co se dá detekovat, to by si to mělo detekovat, co by měl uživatel chtít měnit, to by mělo jít měnit runtime. Je to prostě velmi divné.
Růžové lži.
Josef Kufner avatar 4.5.2009 00:09 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: X server na volenej virtuálnej konzole
To jo... V čem se vlastně ty konfigurace liší ?
Hello world ! Segmentation fault (core dumped)

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.