Migracja na modularne X
1.
Wprowadzenie
Dlaczego modularne X?
Dlaczego jeden wygodny pakiet zmienił się w 300 mniejszych? Proces ten jest
realizowany przez twórców X.Org. Rozdzielają oni wszystkie pakiety na
pomniejsze, a my jedynie podążamy za nimi.
Powodów, dla których pakiet został podzielony i zmienił się sposób jego
budowania budowania jest co najmniej kilka:
-
Nowym deweloperom trudno dołączyć do projektu X, więc postanowiono przejść
na autotools, który jest znacznie wygodniejszy dla większości ludzi.
-
Jeśli korzysta się z autotools, jest możliwy podział źródeł programu,
dzięki czemu cały projekt jest łatwiejszy do zarządzania dla deweloperów.
-
Rzeczy, które niepotrzebnie stały się zależne od siebie w przeszłości,
niejednokrotnie uniemożliwiają tworzenie poprawek. A jeśli już poprawki
były tworzone, wymagało to przebudowywania całego X.Org. Na przykład błąd w
sterownikach ATI musiał czekać 6 miesięcy do następnego wydania lub
wymagał przebudowania czcionek, zupełnie bez powodu.
2.
Migracja do modularnego X
Wstęp
Aby stare pakiety nie wchodziły nam w drogę, najpierw pozbędziemy się starego
xorg-x11, a dopiero potem zainstalujemy modularne X. Nie jest to niezbędne, ale
ułatwi nam migrację.
Krok pierwszy: pozbycie się starego X
Tworzymy kopię bezpieczeństwa starego X, by mieć możliwość powrotu do wersji
6.x. Warto również zainstalować jakąś przeglądarkę internetową działającą w
konsoli, taką jak na przykład links lub lynx. Przyda się ona do czytania tego
opisu gdy środowisko X nie będzie dostępne.
Listing 2.1: Wykonanie kopii zapasowej starego xorg-x11 |
# emerge gentoolkit
# quickpkg xorg-x11
|
Usuwamy starą, monolityczną instalację. W tym momencie należy wyłączyć serwer
X, w innym wypadku podczas aktualizacji komputer się zawiesi.
Listing 2.2: Usuwanie monolitycznej instalacji |
# emerge -Ca xorg-x11 virtual/x11
|
Jeśli /usr/X11R6 nie jest dowiązaniem do /usr,
usuwamy ten katalog i zaczynamy od początku. Najpierw jednak zapisujemy listę
pakietów tam zainstalowanych.
Listing 2.3: Tworzenie listy pakietów |
# if [[ ! -L /usr/X11R6 ]]; \
then equery belongs /usr/X11R6 > ~/usr-x11r6-packages \
&& rm -rf /usr/X11R6; fi
|
Jeśli istnieje katalog /usr/lib/X11/xkb
(/usr/lib64/X11/xkb dla użytkowników 64-bitowych procesorów),
należy go usunąć wraz z całą zawartością. Inaczej nie zainstaluje się pakiet
xkeyboard-config.
Krok drugi: instalacja modularnego X
Aby korzystać z Direct Rendering, należy aktywować dri we flagach USE.
Standardowo powinna być włączona.
Następnie decydujemy, jakie sterowniki chcemy zainstalować. Są one zależne od
naszej konfiguracji sprzętowej. Jeśli posiadamy sprawny plik
/etc/X11/xorg.conf, wystarczy wykonać tylko poniższe polecenie, by
dowiedzieć się jakich sterowników potrzebujemy:
Listing 2.4: Sprawdzanie potrzebnych sterowników |
# grep Driver /etc/X11/xorg.conf
Driver "kbd"
Driver "mouse"
Driver "radeon"
|
Listing 2.5: Checking available drivers |
# emerge --verbose --pretend xorg-x11
[ebuild R ] x11-base/xorg-x11-7.0-r1 USE="-xprint" INPUT_DEVICES="keyboard
mouse -acecad -aiptek -calcomp -citron -digitaledge -dmc -dynapro -elo2300
-elographics -evdev -fpit -hyperpen -jamstudio -joystick -magellan -magictouch
-microtouch -mutouch -palmax -penmount -spaceorb -summa -synaptics% -tek4957
-ur98 -vmmouse -void" VIDEO_CARDS="i128 mga radeon savage -apm -ark -chips
-cirrus -cyrix -dummy -fbdev -fglrx% -glint -i740 -i810 -imstt -mach64
-neomagic -newport -nsc -nv -nvidia% -r128 -rendition -s3 -s3virge
-siliconmotion -sis -sisusb -sunbw2 -suncg14 -suncg3 -suncg6 -sunffb -sunleo
-suntcx -tdfx -tga -trident -tseng -v4l -vesa -vga -via -vmware -voodoo" 0 kB
|
INPUT_DEVICES i VIDEO_CARDS ustawiamy w /etc/make.conf, tak by
odpowiadały naszej konfiguracji. Minimalne ustawienia dla powyższego przykładu
byłby następujące: INPUT_DEVICES="keyboard mouse"
VIDEO_CARDS="radeon". Jeśli nie ustawimy pierwszej lub drugiej zmiennej,
xorg-x11 zainstaluje wszystkie możliwe sterowniki tego typu. Jako sterowniki
zapasowe, można dodać vesa i fbdev do VIDEO_CARDS.
Następnie instalujemy metapakiet. Spowoduje to instalację serwera X oraz
najczęściej używanych aplikacji, dając nam do dyspozycji sprawną implementację
X:
Listing 2.6: Instalacja modularnego metapakietu |
# emerge xorg-x11
# etc-update
# revdep-rebuild
# [[ -e ~/usr-x11r6-packages ]] && emerge $(<~/usr-x11r6-packages)
|
Uwaga:
Jeśli zależy nam na minimalnej instalacji, instalujemy po prostu
xorg-server. Pakiet ten zawiera wszystko, co umożliwi uruchomienie
serwera X.
|
Należy pamiętać, że to polecenie spowoduje minimalną instalację i że rzeczy
takie jak xcursor-themes, nie będą instalowane standardowo. Na przykład, jeśli
zmienialiśmy nasz cursor na whiteglass, redglass lub handhelds, instalujemy
xcursor-themes. Jeśli korzystaliśmy z kursora gentoo, gentoo-blue lub
gentoo-silver, instalujemy gentoo-xcursor.
Uwaga:
Jeżeli mamy zainstalowane modularne X, zewnętrzne sterowniki (takie jak
nvidia-glx i wacom oraz niektóre aplikacje vnc) mogą nie działać, jeżeli
instalują się do /usr/lib/modules zamiast do
/usr/lib/xorg/modules. Wiele z nich będzie miało możliwość
wykrywania modularnych X w procesie instalacyjnym, więc wymagają one jedynie
przeinstalowania po instalacji modularnego X. Wiele z zewnętrznych sterowników
posiada flagę USE dlloader, którą należy włączyć, a następnie
przebudować sterowniki.
|
3.
Częste problemy
'emerge -u world' chce instalować xorg-x11 6.x lub virtual/x11
Zdarza się to dlatego, że drzewo portage jeszcze nie jest w pełni przygotowane
do obsługi modularnych zależności. Można nas w tym wspomóc, czytając opis przenoszenia programów na modularne X i
nadsyłając poprawki do opiekunów poszczególnych pakietów. Opiekunowie są
wymienieni w pliku metadata.xml w tym samym katalogu, w którym jest
pakiet, a program herdstat pozwoli przyspieszyć ich wyszukiwanie.
Jeśli używamy modularnego X na systemie opartym o stabilną gałąź drzewa Portage,
mogą wystąpić problemy. Wiele pakietów działa z modularnymi X tylko w wersjach
niestabilnych, więc możliwe jest, że niezbędne będzie dodanie niektórych
pakietów do /etc/portage/package.keywords.
Co się stało ze wszystkimi flagami USE?
Wiele flag USE z xorg-x11-6.8 zniknęło, kilka zostało przeniesionych na 7.0.
Pojawiło się również kilka nowych.
| Flaga USE |
Co się z nią stało w X 7.0? |
| 3dfx |
W 7.0 powoduje dopisanie glide-v3 do zależności pakietu X |
| 3dnow, mmx, sse |
Te flagi są standardowo włączone w czasie budowania pakietu, ponieważ ich
obsługa jest sprawdzana w momencie uruchomienia.
|
| bitmap-fonts, truetype-fonts, type1-fonts |
Metapakiet xorg-x11 instaluje tylko niewielką ilość najczęściej używanych i
wymaganych czcionek. Można samodzielnie zainstalować dodatkowe czcionki z
katalogu media-fonts/.
|
| cjk |
Należy zainstalować font-misc-misc i font-sony-misc z włączoną flagą nls,
by uzyskać japońskie czcionki w JISX0201. Więcej znajduje się w pakiecie
font-jis-misc. Chińskie czcionki są w font-isas-misc, koreańskie w
font-daewoo-misc.
|
| dlloader |
X 7.0 standardowo używa dlloader, a elfloader nie działa
|
| doc |
Przeniesione do app-doc/xorg-docs |
| dmx |
Wbudowane w xorg-server, o ile nie użyto flagi minimal |
| font-server |
Można samodzielnie doinstalować xfs |
| ipv6 |
Przeniesiono do oddzielnych pakietów korzystających z ipv6. Można również
uruchomić flagę globalnie, jeśli zachodzi taka potrzeba.
|
| minimal |
By uzyskać ten sam efekt należy zainstalować pakiet xorg-server zamiast
metapakietu xorg-x11. By uniknąć budowania Xdmx, Xvfb i Xnest można włączyć
flagę minimal w xorg-server. Jeśli potrzebujemy czegoś jeszcze mniejszego,
warto zainteresować się x11-base/kdrive.
|
| nls |
W 7.0 użycie flagi nls powoduje instalację wszystkich wersji czcionek
różnych od ISO-8859-1.
|
| nocxx |
Nie ma jeszcze swojego odpowiednika w X 7.0 |
| opengl |
Zmienia nazwę na "dri" i wciąż uruchamia Direct Rendering w xorg-server i
wielu sterownikach. Niezależnie czy DRI jest włączona, czy nie, wciąż jest
zapewnione programowe wsparcie 3D przy pomocy Mesa.
|
| pam |
Przeniesione do indywidualnych pakietów korzystających z pam, takich jak
xorg-server i xdm
|
| sdk |
X 7.0 musi zainstalować SDK, w konsekwencji modularyzacji |
| static |
Nie ma sensu budować statycznego serwera, jeżeli cała reszta jest
modularna, ponieważ sterownik by sobie z tym nie poradził.
|
| xprint |
Metapakiet instaluje libXp. W innych aplikacjach uruchamia wsparcie dla
xprint. Większość osób nie chce tego uruchamiać.
|
| xv |
Przestała być opcjonalna, ponieważ nie zaoszczędza zbyt wiele miejsca i
powoduje problemy z pakietami oczekującymi, że ta flaga będzie włączona.
|
Co się stało z plikami konfiguracyjnymi?
W pakiecie X.Org 6.8 znajdującym się w drzewie, wszystkie pliki konfiguracyjne
i skrypty umieszczone były w katalogu /etc/X11. W modularnym X.Org
jego deweloperzy zmienili lokalizacje tych plików, przez co pliki
konfiguracyjne znajdują się dalej w katalogu /etc/X11 natomiast
skrypty i domyślne konfiguracje zostały umieszczone w katalogu
/usr/lib/X11 (lub /usr/lib64/X11) i
/usr/share/X11.
Ponieważ posiadamy zabezpieczenie plików konfiguracyjnych (CONFIG_PROTECT),
wszystkie nasze pliki z X.Org 6.8 prawdopodobnie cały czas będą w katalogu
/etc/X11.
Ponieważ katalogi te nie znajdują się w zmiennej CONFIG_PROTECT, ważnym jest,
aby każde zmiany przeprowadzane na domyślnych plikach konfiguracyjnych były
robione poprzez przekopiowanie odpowiednich plików do katalogu
/etc/X11, a wszelkie ich aktualizacje były przeprowadzane w tym
katalogu. Drugim, lecz nie zalecanym, sposobem jest dodanie nowych lokalizacji
do zmiennej CONFIG_PROTECT. Poniżej prezentujemy dwa przykłady:
Listing 3.1: Dostosowywanie procesu uruchamiania XDM-a |
# cp -a /usr/lib/X11/xdm/Xsetup_0 /etc/X11/xdm/
# nano /etc/X11/xdm/xdm-config
! The following three resources set up display :0 as the console.
DisplayManager._0.setup: /usr/lib/X11/xdm/Xsetup_0
DisplayManager._0.startup: /usr/lib/X11/xdm/GiveConsole
DisplayManager._0.reset: /usr/lib/X11/xdm/TakeConsole
! The following three resources set up display :0 as the console.
DisplayManager._0.setup: /etc/X11/xdm/Xsetup_0
DisplayManager._0.startup: /usr/lib/X11/xdm/GiveConsole
DisplayManager._0.reset: /usr/lib/X11/xdm/TakeConsole
|
Uwaga:
Na systemach korzystających z bibliotek 64-bitowych, potrzebna będzie zmiana
lib na lib64.
|
W tym przykładzie dodanym przez Joe Womacka, zajmiemy się zmianami ustawień
xterm. Można to zrobić globalnie lub dla konkretnego użytkownika.
Listing 3.2: Dostosowywanie app-defaults/XTerm-color globalnie |
# cp -a /usr/share/X11/app-defaults/XTerm-color /etc/X11/app-defaults/
# echo '# To wprowadza zmiany dla całego systemu.' >> /etc/env.d/10xpaths
# echo 'XFILESEARCHPATH=/etc/X11/%T/%N:/usr/share/X11/%T/%N' >> /etc/env.d/10xpaths
|
Listing 3.3: Dostosowywanie app-defaults/XTerm-color lokalnie |
# echo '# To wprowadza zmiany dla użytkownika w $HOME/app-defaults' >> /etc/env.d/10xpaths
# echo 'XUSERFILESEARCHPATH=$HOME/%T/%N' >> /etc/env.d/10xpaths
# echo '! Xterm defaults' >> .Xresources
# echo 'XTerm*CursorColor: orange' >> .Xresources
# echo 'XTerm*loginShell: true' >> .Xresources
# echo 'XTerm*scrollBar: true' >> .Xresources
# echo 'XTerm*saveLines: 1000' >> .Xresources
# xrdb -merge $HOME/.Xresources
|
Uwaga:
Aby dowiedzieć się więcej o XFILESEARCHPATH i XUSERFILESEARCHPATH
należy zapoznać się z dokumentem dostępnym pod adresem
http://www.faqs.org/faqs/x-faq/part2/section-22.html.
Aby zasięgnąć dalszych informacji o pliku .Xresources należy przejrzeć
http://tldp.org/HOWTO/XWindow-User-HOWTO/moreconfig.html#XRESOURCES.
|
Problemy ze sterownikami
Zgłaszano nam, że:
- vesa zawiesza komputery z kartą Matrox
-
vga tworzy bardzo dziwnie wyglądający ekran, podzielony na cztery części
Ponowne uruchomienie akceleracji 3D
Programy te, zawarte są w pakiecie x11-apps/mesa-progs. mesa-progs
jest instalowane przez pakiet x11-base/xorg-x11 automatycznie.
Listing 3.4: Włączanie informacji diagnostycznych |
# grep -e EE -e WW /var/log/Xorg.0.log
# LIBGL_DEBUG=verbose glxinfo
|
Automatyczne wykrywanie protokołu myszki
Opcja "Protocol" "auto" w xorg.conf dla naszej myszy, może
nie zadziałać. Należy ustawić "Protocol" "ExplorerPS/2" lub
"IMPS/2" by działało kółko myszki.
Pojawiają się błędy dotyczące braku libbitmap lub libpcidata
Należy się upewnić, że żaden wpis ModulePath nie istnieje w
/etc/X11/xorg.conf.
Program gdm/kdm nie działa
Jeżeli instalowaliśmy modularne X na nowej instalacji Gentoo, w systemie może
nie być obecne dowiązanie symboliczne /usr/X11R6 ->
/usr. Pakiet x11-base/xorg-x11 upewni się, czy symlink
istnieje podczas procesu
instalacji.
Można nas wesprzeć w poprawianiu pakietów instalujących się w
/usr/X11R6 poprzez tworzenie poprawek i nadsyłanie nam ich.
Listing 3.5: Pakiety, które instalują się w /usr/X11R6 |
# cat ~/usr-x11r6-packages
# emerge --pretend $(< ~/usr-x11r6-packages )
|
XKB nie działa, nie można zmienić VT, itd.
- Wiele układów klawiatury z XKB zostało przeniesionych, połączonych, lub
usuniętych. Radzimy zajrzeć do /usr/share/X11/xkb/symbols/pc, by
zobaczyć, co stało się z naszym starym ustawieniem XkbLayout w xorg.conf. Na
przykład, by zmienić stary układ "us_intl", dodajemy "XkbLayout"
"latin" i "XkbOptions" "lv3:ralt_switch". Zamiast "sk_qwerty"
użyjemy "XkbLayout" "sk" i "XkbVariant" "qwerty". Jako bardziej
zaawansowany przykład, możemy użyć "XkbLayout" "us,sk_qwerty", które
zamienilibyśmy na "XkbLayout" "us,sk". Teraz ważna część:
"XkbVariant" ",qwerty". Należy zwrócić uwagę na przecinek, ponieważ
chcemy, by wariant dotyczył drugiego układu.
Listing 3.6: Odszukiwanie zmian w XKB |
# grep Xkb /etc/X11/xorg.conf
Option "XkbModel" "logibik"
Option "XkbLayout" "dvorak"
Option "XkbOptions" "ctrl:swapcaps"
# cd /usr/share/X11/xkb/symbols/
# ls *dvorak*
# ls *us*
us
# grep xkb_symbols.*dvorak us
xkb_symbols "dvorak" {
# setxkbmap -model logibik -layout us -variant dvorak -option "ctrl:swapcaps"
# cd /usr/share/X11/xkb/rules/
# grep logibik xorg.lst
# grep logi* xorg.lst
logiaccess Logitech Access Keyboard
logicdit Logitech Cordless Desktop iTouch
logicdp Logitech Cordless Desktop Pro
logicdpa Logitech Cordless Desktop Pro (alternate option)
logicdpa2 Logitech Cordless Desktop Pro (alternate option2)
logicdo Logitech Cordless Desktop Optical
logicfn Logitech Cordless Freedom/Desktop Navigator
logicdn Logitech Cordless Desktop Navigator
logidak Logitech Deluxe Access Keyboard
logiitc Logitech iTouch Cordless Keyboard (model Y-RB6)
logiik Logitech Internet Keyboard
logiitc Logitech iTouch Cordless Keyboard (model Y-RB6)
logiik Logitech Internet Keyboard
logiink Logitech Internet Navigator Keyboard
logiultrax Logitech Ultra-X Keyboard
# setxkbmap -model logiik -layout us -variant dvorak -option "ctrl:swapcaps"
|
Pozostałe sprawy
-
Pakiet x11-base/xorg-x11 filtruje teraz wszystkie linie ModulePath i
RgbPath w /etc/X11/xorg.conf, ponieważ obie te ścieżki zmieniły
się od czasu poprzedniej wersji. Należy pamiętać o uruchomieniu
etc-update w celu sfinalizowania tych zmian.
Zawartość tego dokumentu jest rozpowszechniana na podstawie licencji Creative Commons -
Attribution / Share Alike.
|