Beni oturum açmak ve Birlik veya başka bir Grafiksel Kullanıcı Arayüzünü başlatmak için kapakların altında ne olur?


55

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:


86

Bir masaüstü kullanıcı GUI oturumu Ubuntu 12.04-14.04 ile nasıl başlar

İşte olaylar zinciri:

Ubuntu Linux çekirdeği ve başlangıç

Ç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.logbaş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 systemdzamanla bir hizmet birimine dönüştürülmesini bekleyebiliriz .

Lightdm


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.logve kontrol eder /etc/pam.conf(neredeyse boş) ve /etc/pam.d/*. Özellikle, bkz. /etc/pam.d/lightdmVe /etc/pam.d/lightdm-autologin.

Kullanıcı kimliği doğrulandıktan sonra ayrıcalıklar düşer ve ~user/.dmrcoturumu tanımlayan bir dosya yazılır . Örneğin:

[Desktop]
Session=ubuntu

veya

[Desktop]
Session=awesome

Bundan sonra .desktopdosyalar /usr/share/xsessions/*.desktopbaş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-sessionKabuk komut argümanlar g ile gerçekleştirilir nome-session --session=ubuntu (sic .-- 'ubuntu' değil, 'birlik')

lightdm oturumlu


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;
  • yükler kaynakları dan /etc/X11/Xresourcesve $HOME/.XresourcesVarsa, içeriğini kullanarak setxbmap ile klavye haritası yükler /etc/X11/Xkbmapve $HOME/.Xkbmap;
  • XKB kullanılmıyorsa, mevcut olanlara karşı xmodmap kullanılır /etc/X11/Xmodmapve$HOME/.Xmodmap
  • komut dosyalarını çalıştırır /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.optionsdosyada 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_testve 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/00upstartdeğişkeni UPSTARTolarak ayarlar 1. /etc/X11/Xsession.d/99upstartbu 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.confgnome 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.

GNOME oturumu oturum yöneticisi (Unity ve Gnome Mermileri)


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.

Pencere Yöneticileri

Müthiş Pencere Yöneticisi


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.

Birlik


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.

compiz'i


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.


Sistemimin Müthiş, Birlik mi, yoksa derleme mi çalıştığını nasıl anlarım?
James,

@james Muhtemelen süreç listesinde compiz veya awesome olup olmadığını kontrol edebilirsiniz. Böyle bir komutla anlıyorsunuz 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.
John S Gruber,

İstisnai cevap, önkoşul bilgi olmadan süreci iyi anlayabilmenizi sağlar! Açıklamanızın ardından, xsessions/ubuntu.desktopbaş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.desktopxsession ile ilgili özel bir şey var mı ?
İlan N

Gerçekten, eğer yapabilseydim +10 olur. Doktordan daha iyi ...
Ring Ø

Bunu yazdığın için teşekkürler. Daha yeni Ubuntu sürümleri için işlerin nasıl değiştiğini güncelleyebilir misiniz?
exic
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.