Bir sorun olduğunda, bir kullanıcıyı bir GUI oturumuna kaydettirmek ve bir masaüstünü açmak için Birlik (veya başka bir pencere yöneticisi) almak için kapakların altında neler olduğunu anlamak iyi olabilir.
Bir sorun olduğunda, bir kullanıcıyı bir GUI oturumuna kaydettirmek ve bir masaüstünü açmak için Birlik (veya başka bir pencere yöneticisi) almak için kapakların altında neler olduğunu anlamak iyi olabilir.
Yanıtlar:
İşte olaylar zinciri:
Çekirdek, init işlemini 1 numaralı işlem olarak başlatır. Bu, Ubuntu 12.04 için başlangıçtır.
Başlangıç işlerinde /etc/init/
Man sayfası: man init
Günlükler: çekirdek günlüğü ( dmesg
; kopyalanır /var/log/syslog
), /var/log/upstart/jobname.log
başlatılan işler tarafından belirlenen diğer günlükler.
Kaynak: /etc/init/lightdm.conf
Başlatma işi yürütülür /usr/sbin/lightdm
. Muhtemelen bunun systemd
zamanla bir hizmet birimine dönüştürülmesini bekleyebiliriz .
Man sayfası:, man lightdm
Ayrıca: Ubuntu Wiki: LightDM
Kütükler:
/var/log/syslog
/var/log/lightdm/lightdm.log
/var/log/lightdm/*
## for PAM:
/var/log/auth.log
## for the Xorg X server:
/var/log/Xorg.0.log
Kaynak: adam lightdm ve/var/log/lightdm/lightdm.log
lightdm get init sürecinde oldukça geç başladı; Örneğin, dbus sisteminin önceden başlatılmış olması, dosya sisteminin hazır olması ve grafik görüntüleme sisteminin hazır olması gerekir.
lightdm, bir xauthority dosyası oluşturur ve sonra X + 'yı başlatır, sonra Alt+ Ctrl+ tuşlarına basarsanız sanal terminali VT 7'den başlatır F7. X başlatıldığında lightdm, Plymouth açılış ekranı programından çıkmak için sinyal verir. Bu, tüm şahısların (1-6) başladıktan sonra gerçekleşmesi esastır.
Temmuz 2013'ten beri Mir destek öğeleri lightdm'e eklendi, ancak bunlar 14.04'ten beri varsayılan olarak masaüstü sistemleri için kullanılmıyor.
X, mümkün olan en gelişmiş sürücüleri kullanmaya çalışır. Kendi sürücüleri yüklenmiştir /usr/lib/xorg/modules/
. Çekirdek sürücüleri ve pek çok aygıt için xorg sürücüsü bulunduğunu, xorg sürücülerinin neredeyse kesinlikle çekirdek sürücüleri kullandığını unutmayın. dri ve glx, özellikle yüksek performanslı grafikler için önemli özelliklerdir. Günlükler X girişi için saklanır /var/log/Xorg.0.log
.
Sistem dbus üzerinden bu "koltuk" hakkında iletişim var ve olası kullanıcı adları edinildi. lightdm, ekranı çizmek için X'i kullanır. birlik-selamlayıcı bu sürece yardımcı olmak için kullanılır.
Çeşitli olası kullanıcı kimliklerini seçtiğinizde, kullanıcı kimliğinin backgound görüntüsü kullanılır.
lightdm, potansiyel pencere yöneticilerinin / sistemlerin adlarını alır /usr/share/xsessions/*.desktop
.
Hesap bilgileri dbus üzerinden hesap hesabı hesapları-arka plan programı aracılığıyla elde edilir.
lightdm ve karşılayıcı, kullanıcıyı doğrulamak için PAM kullanır. Kimlik doğrulaması yapıldıktan sonra PAM, --login seçeneğiyle bir gnome-keyring-daemon cini başlatır ve varsa kullanıcının giriş anahtarının kilidini açabilmesi için kullanıcı parolasını besler. Daha fazla bilgi için https://live.gnome.org/GnomeKeyring/Pam ve man 8 pam_unix'e bakınız . PAM, günlük bilgilerini depolar /var/log/auth.log
ve kontrol eder /etc/pam.conf
(neredeyse boş) ve /etc/pam.d/*
. Özellikle, bkz. /etc/pam.d/lightdm
Ve /etc/pam.d/lightdm-autologin
.
Kullanıcı kimliği doğrulandıktan sonra ayrıcalıklar düşer ve ~user/.dmrc
oturumu tanımlayan bir dosya yazılır . Örneğin:
[Desktop]
Session=ubuntu
veya
[Desktop]
Session=awesome
Bundan sonra .desktop
dosyalar /usr/share/xsessions/*.desktop
başlangıç sırasının geri kalanını belirler.
Mesela işte Birlik için bir tane:
[Desktop Entry]
Name=Ubuntu
Comment=This session logs you into Ubuntu
Exec=gnome-session --session=ubuntu
TryExec=unity
Icon=
Type=Application
X-Ubuntu-Gettext-Domain=gnome-session-3.0
/usr/sbin/lightdm-session
Kabuk komut argümanlar g ile gerçekleştirilir nome-session --session=ubuntu
(sic .-- 'ubuntu' değil, 'birlik')
Kütükler: ?
Hata Günlükleri: ~/.xsession-errors
Başlatılan İşlem Günlükleri: ~/.cache/upstart/*
Kaynak:/usr/sbin/lightdm-session
/usr/sbin/lightdm-session
sonra şu adımları atar:
Koşar:
/etc/profile, $HOME/.profile
/etc/xprofile $HOME/.xprofile
; /etc/X11/Xresources
ve $HOME/.Xresources
Varsa, içeriğini kullanarak setxbmap ile klavye haritası yükler
/etc/X11/Xkbmap
ve $HOME/.Xkbmap
; /etc/X11/Xmodmap
ve$HOME/.Xmodmap
/etc/X11/xinit/xinitrc.d
; /etc/X11/Xsession.d/*
içindeki seçenekleri kullanarak Xsession komut dosyalarını çalıştırır /etc/X11/Xsession.options
.
Bunlardan biri ssh-agent'ı başlatır (gereksiz), diğeri çalıştırır $HOME/.xsessionrc
. Bir başkası session-dbus'i başlatır (yukarıdaki Xsession.options
dosyada izin verildiği şekilde hem ssh-agent hem de session-dbus ). Bu oturum dbus, bu tek kullanıcı oturumuyla ilgili işlemler arasındaki iletişim için kullanışlıdır.
ssh-agent, oturum sırasında bir süre ssh eklenmişse, oturum için ssh tuşlarını tutabilir, ancak gnome-keyring-daemon da aynı şeyi yapar.
/etc/X11/Xsession.d/50_check_unity_support
çalışır /usr/lib/nux/unity_support_test
ve LIBGL_ALWAYS_SOFTWARE=1
çevreye yapılan ihracatı başarısız hale getirirse llvmpipe
, masaüstünü işlemek için kullanılan yazılım.
Ubunu 13.10 ile başlayan:
/etc/X11/Xsession.d/00upstart
değişkeni UPSTART
olarak ayarlar 1
.
/etc/X11/Xsession.d/99upstart
bu değişkeni denetler ve eğer ayarlanmışsa init --user
, ayarlanan diğer öğelerin yerine geçer $STARTUP
. Böylece kullanıcı modu başlatma, bu başlangıç işlerini başlatır /usr/share/upstart/sessions
. Bunlardan biri gnome-session.conf
gnome seansını başlatan şey .
Zaten bitmediyse, nihayet lightdm-oturumu bir pencere yöneticisini başlatır ya da birlik için, yukarıdaki cümle-oturumu oturum yöneticisini başlatır.
Lightdm oturumunun geleneksel xsession rolünü üstlendiği anlaşılıyor. Man sayfası http://manpages.ubuntu.com/manpages/precise/man5/Xsession.5.html adresindedir . lightdm bir oturum sarmalayıcı olarak kabul eder.
Manpage: http://manpages.ubuntu.com/manpages/precise/en/man1/gnome-session.1.html
Günlükleri :?
Kaynak: man page
gnome-session Birlik için kullanılır, ancak varsayılan olarak harika değil. Yukarıdaki .desktop dosyalarına bakın.
gnome-oturumu belirtilen programı / usr / share / gnome-session / sessions / 'dan başlatır ve uygulamaları ~ / .config / autostart / ve / etc / xdg / autostart' dan başlatır.
İşte / etc / xdg / autostart 'den bir örnek:
$cat /etc/xdg/autostart/nm-applet.desktop
[Desktop Entry]
Name=Network
Comment=Manage your network connections
Icon=nm-device-wireless
Exec=nm-applet
Terminal=false
Type=Application
NoDisplay=true
NotShowIn=KDE;
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Component=general
X-GNOME-Autostart-enabled=true
X-Ubuntu-Gettext-Domain=nm-applet
Başka bir /etc/xdg/autostart/gnome-keyring-ssh.desktop, --start seçeneğiyle gnome-keyring-daemon'u başlatır, bu daemon sürecinin başlangıcını tamamlar ve bu konuda potansiyel kullanım için ortamda önemli bilgileri depolar. sSH.
Bir ps aux listesinden gnome-oturumu dbus-launch ile pencere yöneticilerini başlatıyor gibi görünüyor.
Man sayfası: http://manpages.ubuntu.com/manpages/precise/en/man1/awesome.1.html
Kayıtlar:?
Kaynak: man sayfası, yapılandırma dosyası incelemesi
İşte / usr / share / xsessions / dizinindeki /.
[Desktop Entry]
Encoding=UTF-8
Name=awesome
Comment=Highly configurable framework window manager
TryExec=awesome
Exec=awesome
Gördüğünüz gibi, giriş basitçe harika pencere yöneticisinin yürütülmesine neden oluyor. /Etc/xdg/awesome/rc.lua dahil kendi yapılandırma dosyalarını harika bir pakette okuyor. $ HOME / .config / awesome / rc.lua ile yapılandırılabilir.
Kaynak: config dosya incelemesi
İşte / usr / share / xsessions / dizinindeki ubuntu.desktop dosyası:
[Desktop Entry]
Name=Ubuntu
Comment=This session logs you into Ubuntu
Exec=gnome-session --session=ubuntu
TryExec=unity
Icon=
Type=Application
X-Ubuntu-Gettext-Domain=gnome-session-3.0
Bu, /usr/share/gnome-session/sessions/ubuntu.session bölümünde açıklanan gnome oturumunu başlatır.
İşte bu dosya:
[GNOME Session]
Name=Ubuntu
RequiredComponents=gnome-settings-daemon;
RequiredProviders=windowmanager;panel;
DefaultProvider-windowmanager=compiz
DefaultProvider-panel=compiz
IsRunnableHelper=/usr/lib/nux/unity_support_test
FallbackSession=ubuntu-2d
DesktopName=Unity
12.04'te gnome-session tarafından çalıştırılan IsRunnableHelper programı, birliğin çalıştırılıp çalıştırılamayacağını veya ubuntu-2d'nin çalışıp çalışmayacağını belirler. Bir hata yapar ve birliğin kaçabileceğini ve kaçamayacağını söylerse, bir sorun vardır. Eğer bu olursa, ubuntu-2d'yi lightdm içinde manuel olarak seçin. Bir dönüş kodu döndürürken, -p seçeneğiyle çalıştırarak ne yaptığını görebiliriz.
$ /usr/lib/nux/unity_support_test -p
OpenGL vendor string: X.Org R300 Project
OpenGL renderer string: Gallium 0.4 on ATI RS690
OpenGL version string: 2.1 Mesa 8.0.2
Not software rendered: yes
Not blacklisted: yes
GLX fbconfig: yes
GLX texture from pixmap: yes
GL npot or rect textures: yes
GL vertex program: yes
GL fragment program: yes
GL vertex buffer object: yes
GL framebuffer object: yes
GL version is 1.4+: yes
Unity 3D supported: yes
12.10 ve sonrası için desteklenmeyen donanım, donanımın yapamayacağı şeyi yapmak için llvmpipe yazılımını kullanır. Yapılandırma dosyası yukarıdakilerden daha basittir. Nasıl etkinleştirildiğini görmek için yukarıya bakın.
Yukarıdaki dosyalardan gnome-oturumu ayarları daemon başlatmalı ve bir pencere yöneticisi ve herhangi bir panel çalıştırmak amacıyla derlemeye başlaması gerektiğini görebiliriz.
Man sayfası: http://manpages.ubuntu.com/manpages/precise/tr/man1/compiz.1.html
Kayıtlar:?
Kaynak: http://en.wikipedia.org/wiki/Compiz , dosya sistemi incelemesi
Derleme başladığında, çeşitli eklentileri çalıştırır. 12.10'dan önce gnome-ayarları bunları tanımlamak için kullanılır. Ccsm (compiz config settings manager) veya gconf-editor ile değiştirilebilirler. Eklenti ayarları, active_plugins altındaki apps / compiz-1 / general / screen0 / options dizininde saklanır. Kopyalar, compiz ile segfaults olmamı sağladı. Bunlar, kullanıcının ana dizininde ~ / .gconf / dizininde, yukarıdaki gibi düzenlenmiş olarak saklanır. Gerçek değerler orada% gconf.xml dosyalarında saklanır.
12.10'dan beri bu eklentiler ~ / .config / dconf / user dosyanızdaki ikili dosyalarda saklanır. Dconf veya gsettings ayarlarının kaydedilme yöntemi daha yenidir. Tüm bu ayarları ile görebilirsiniz dconf dump /org/gnome/
.
Unityshell bu eklentilerden biridir. Nux projesini gömülü bir araç takımı olarak kullanır. Görüntüler, belirtilen saydamlık değerleriyle 3 boyutlu uzayda dokular üzerine çizilir. Bunlar, compiz tarafından işlenir ve llvm'ye veya gelişmiş grafik sürücülerine, sistemin bilgisayar grafik donanımı üzerinde grafik motorlarının bulunması ve bunları oluşturması için gönderilir. Genel olarak, bu, görüntüleri daha geleneksel şekilde yapıldığı gibi doğrudan bir çerçeveye yansıtmanın aksine. Bu karmaşık olaylar zinciri, daha gelişmiş sürücüler gerektirir ve bazen Ubuntu'da özel grafik sürücülerinin kullanılmasını ister.
ps aux
. Ayrıca, Oturum parametresi için ~ / .dmrc dosyasını da kontrol edebilirsiniz cat ~/.dmrc
. Yukarıyı görmek. Session = ubuntu, birlikte compiz ve birliği kullandığınız anlamına gelir (ve bu varsayılandır.
xsessions/ubuntu.desktop
başka bir dosyayı kopyalamaya çalıştım ve aynı davranışla sonuçlanacağını umdum, ancak başarılı olamadım ( bu sorudaki daha fazla ayrıntı ). Varsayılan ubuntu.desktop
xsession ile ilgili özel bir şey var mı ?