«Περίεργη» συμπεριφορά xinitrc με «χειροκινητα» sessions

Συζήτηση στην κατηγορία 'Απορίες για το Περιβάλλον Εργασίας - Εμφάνιση' που ξεκίνησε ο χρήστης DarkGoth, 20 Σεπ 2017.

  1. DarkGoth Παιδί για τις δουλειές του Forum

    εχω φτιαξει το συστημα να τρεχει χωρις login manager, με xinitrc. το προβλημα μολις το προσεξα γιατι ηθελα να σηκωσω τον ποντικοφαρμακο, για να δω κατι με την εντολη xsetroot. το xinitrc ειναι ετσι:...
    Κώδικας:
    #!/bin/sh
     
    # /etc/X11/xinit/xinitrc
    #
    # global xinitrc file, used by all X sessions started by xinit (startx)
     
    # invoke global X session script
    . /etc/X11/Xsession
    gnome-session --failsafe
    #ratpoison --interactive
    
    για να «επιλεξω» τον ποντικοφαρμακο, βγαινω απο το gnome, αλλαζω το gnome με τον ποντικοφαρμακο (βγαζοντας το # απο το ποντικοφαρμακο και βαζοντας το στο gnome) και ξαναμπαινω. περιμενω να δω (η, να «μην δω» γιατι ειναι εντελως αδειο) το ποντικοφαρμακο, αλλα παλι με πεταει σε gnome. το περιεργο ειναι το εξης. αν κανω το αρχειο ετσι:...
    Κώδικας:
    gnome-session --failsafe
    #ratpoison --interactive
    
    αν «επιλεξω» τον ποντικοφαρμακο φορτωνει κανονικα, αν «επιλεξω» το gnome το ιδιο. αν δεν «επιλεξω» κανενα (βαζοντας # και στα 2), φορτωνει μια σκετη κενη μαυρη οθονη (λογικο αν και οχι και πολυ χρησιμο)

    παντου ομως λενε οτι η σωστη συνταξη του xinitrc ειναι η 1η (με τα σκριπτ, κλπ). αν το κανω οπως στο 2ο (απλα τα sessions και τιποτα αλλο), υπαρχει καποιο προβλημα; μπορει να προκυψει καποια δυσλειτουργια;
  2. Soulrain Falls Ο Αντμινιστράτορας

    Κανονικά είναι
    Κώδικας:
    exec gnome-session --failsafe
    #exec ratpoison --interactive
    Μπορείς επίσης να το προσαρμόσεις ώστε να δίνεις π.χ.
    Κώδικας:
    startx gnome-session --failsafe
    και να μη χρειάζεται να πειράξεις το .xinitrc κάθε φορά.

    Το
    Κώδικας:
    . /etc/X11/Xsession
    δεν ξέρω τι ακριβώς θα κάνει source εφόσον δεν έχει ξεκινήσει τίποτα ακόμα, κατά τα άλλα όμως, όχι, δεν υπάρχει πρόβλημα με τον τρόπο που λες. Ούτως ή άλλως, το GNOME Shell ξεκινάει τα δικά του μπλιμπλίκια μόνο του και για τον ποντικοφάρμακο υποθέτω δε θέλεις να ξεκινάει κάτι ιδιαίτερο.
  3. DarkGoth Παιδί για τις δουλειές του Forum

    το «/etc/x11/xsession», υποθετω οτι μαλλον θα ρυθμιζει τιποτα παραμετρους, environment variables, κλπ, πως να τρεξει ο xserver που θα φορτωσει αργοτερα, η, κατι τετοιο; καπως ετσι το υποθετω. π.χ. αν θα δεχεται συνδεσεις απο remote sessions κλπ τετοια, ποιο θα ειναι το default xsession (γιατι αν το αφησω στο xinitrc με παει παντα σε gnome, ενω αν το βγαλω φορτωνει κανονικα οτι εχω «επιλεξει»). το gnome ναι φορτωνει μονο του οτι ειναι. στον ποντικοφαρμακο προφανως και δεν θελω κατι παραπανω. μονο τον ιδιον, και αντε και κανα terminal (που ουτως'η'αλλως εχει συντομευση γι'αυτο)

    το «exec» το ειδα και εγω, αλλα ειτε το βαλω, ειτε οχι, δεν βλεπω καμια απολυτως διαφορα, και το εχω παραλειψει για να ειναι το αρχειακι οσο πιο απλο και μικρο γινεται. δεν εχω βρει πουθενα που να εξηγουν τι ακριβως «προσφερει», και ποια διαφορα εχει με το «exec» και χωρις, οποτε δεν το βαζω καθολου. στο archwiki ειδα μονο οτι λενε, οτι αν το βγαλεις δεν σε κανει logoff απο το tty, οταν κλεισεις το γραφικο (ΔΕΝ θελω να με κανει logoff απο το tty οταν κλεινω το γραφικο), ενω αν το αφησεις σε βγαζει και απο το tty (δεν το δοκιμασα, αλλα το wiki του arch ειναι, οχι το φορουμ του ΜΧ :p:eek: )
  4. Soulrain Falls Ο Αντμινιστράτορας

    Δεν τα ξέρω αυτά, το Xsession είναι παλιακό (πλακίζω αλλά είναι).

    Το exec δε θα σου κάνει διαφορά σε αυτό που θέλεις αλλά είναι «ορθή πρακτική» να το βάζεις (όπως επίσης είναι «ορθή πρακτική» να σε κάνει logout από τα πάντα όταν βγαίνεις, διότι ασφάλεια. Αλλά δε σε υποχρεώνει κανένας αν δε θέλεις).

    Τι κάνει το exec; Αφού έχει ξεκινήσει το σύστημά σου και τρέχει το shell (/bin/sh, που είναι symlink στο /bin/bash για τις περισσότερες διανομές αλλά -νομίζω- στο /bin/dash για το Debian), φτάνεις στο σημείο που του λες για το γραφικό. Αν δε βάλεις το exec, θα δημιουργηθεί child process και θα σηκώσει το γραφικό. Τα child processes όμως «κληρονομούν» πράγματα από το parent process και αυτό «κανονικά» δεν το θέλεις επειδή το shell και το γραφικό δεν είναι το ίδιο προγραμμα. Γι' αυτό βάζεις το exec και του λες "ευχαριστώ πολύ αγαπητό shell, σταμάτα τώρα και θα σε αντικαταστήσει το γραφικό". Κι έτσι το γραφικό σου αντικαθιστά το shell, γίνεται parent process στη θέση του και κάνει τη δουλειά του.

    Αν τυχόν υπάρχει κάτι μετά τη γραμμή με το exec, δε θα εκτελεστεί, εφόσον παύει το shell. Γι' αυτό και το βάζουμε στο τέλος. Το ίδιο ισχύει για οποιοδήποτε script.
  5. DarkGoth Παιδί για τις δουλειές του Forum

    δοκιμασα με το exec. καποια αλλαγη στα δικαιωματα προσβασης και χρηστων, δεν ειδα πουθενα. η, τουλαχιστον, οχι στα βασικα. πιο μεσα δεν το εψαξα. ειτε με το exec, ειτε χωρις, ειναι ετσι:...
    Κώδικας:
    root      2065  0.0  0.0  73892  3260 tty1     Ss   09:37   0:00 /bin/login -f       
    debian    2070  0.0  0.0  21704  3308 tty1     S+   09:37   0:00  \_ -bash
    debian    2075  0.0  0.0   4336  1364 tty1     S+   09:37   0:00      \_ /bin/sh /usr/bin/startx
    debian    2097  0.0  0.0  15952  1900 tty1     S+   09:37   0:00          \_ xinit /home/debian/.xinitrc -- /etc/X11/xinit/xserverrc :0 vt1 -auth /tmp/serverauth.n347djCx22
    root      2098  1.8  1.1 204364 46016 tty1     S    09:37   0:11              \_ /usr/bin/X -nolisten tcp :0 vt1 -auth /tmp/serverauth.n347djCx22
    debian    2103  0.0  0.0   4336   764 tty1     S    09:37   0:00              \_ sh /home/debian/.xinitrc
    debian    2104  0.0  0.2 526780 10484 tty1     Sl   09:37   0:00                  \_ gnome-session --failsafe
    debian    2125  0.0  0.7 1035416 31596 tty1    Sl   09:37   0:00                      \_ /usr/lib/gnome-settings-daemon/gnome-settings-daemon
    debian    2151  3.1  2.8 1539756 113948 tty1   Sl   09:37   0:18                      \_ /usr/bin/gnome-shell
    debian    2464 21.6  6.5 2167196 264324 tty1   Sl   09:42   0:54                          \_ firefox-esr -p --no-remote
    debian    2107  0.0  0.0  24372  1760 tty1     S    09:37   0:00 dbus-launch --exit-with-session gnome-session --failsafe
    debian    2155  0.0  0.2 393060  9996 tty1     Sl   09:37   0:00 /usr/lib/gnome-settings-daemon/gsd-printer
    
    το «. /etc/X11/Xsession» ειδα οτι ουσιαστικα αυτο που κανει, ειναι να σηκωνει εναν «x-session-manager». δεν με φαινεται και πολυ χρησιμο, οποτε αφου δεν κανει κατι αλλο το εβγαλα τελικα.
  6. Soulrain Falls Ο Αντμινιστράτορας

    Δεν αλλάζει δικαιώματα το exec, απλά αντικαθιστά το process. Υπάρχει ένας πολύ απλός τρόπος για να καταλάβεις τη διαφορά. Άνοιξε το τερματικό σου και δώσε μία εντολή, π.χ.
    Κώδικας:
    notify-send "μπλα μπλα μπλα"
    Θα την τρέξει, θα δεις την ειδοποίηση και θα επιστρέψει στο prompt, γιατί το parent process είναι το shell. Μετά κάνε το ίδιο αλλά δώσε
    Κώδικας:
    exec notify-send "μπλα μπλα μπλα"
    Θα δεις πάλι την ειδοποίηση αλλά αυτη τη φορά θα γίνει κάτι διαφορετικό.
  7. DarkGoth Παιδί για τις δουλειές του Forum

    [IMG]

    μαλλον το παραεγδυσα το debian :D:p ... oops!... :D:p
  8. Soulrain Falls Ο Αντμινιστράτορας

    Ίσως και να μην το είχες εγκατεστημένο εξαρχής. Δεν ξέρω τι πακετάρισμα κάνει το Debian αλλά είναι το πιο συνηθισμένο σύστημα ειδοποιήσεων οπότε όλο και κάτι θα το έχει ως εξάρτηση. Βέβαια, μπορεί σε μελλοντική έκδοση το GNOME να αφαιρέσει εντελώς τις ειδοποιήσεις. Τι, μήπως είναι χρήσιμες;

    EDIT: Το ίδιο το GNOME δεν το χρειάζεται γιατί χρησιμοποιεί το dbus. Εγώ το χρησιμοποιώ για τα σκριπτάκια, γιατί το dbus δεν είναι ό,τι καλύτερο σε τέτοιες περιπτώσεις.
  9. DarkGoth Παιδί για τις δουλειές του Forum

    το gnome αν θυμαμαι καλα εχει το zenity για desktop notifications.

    στο dbus, το αντιστοιχο "notify-send", ειναι να υποθεσω το "dbus-send";
  10. Soulrain Falls Ο Αντμινιστράτορας

    Το zenity είναι ο αντικαταστάτης του παλιού gdialog (νομίζω) και χρησιμοποιείται για να φτιάχνεις παράθυρα διαλόγων. Μπορείς να το κάνεις να δείχνει ειδοποιήσεις (κι αυτές διάλογοι είναι) αλλά δεν τις παράγει αυτό.

    Ναι, στο dbus είναι κάπως έτσι αλλά έχει ολόκληρο κατεβατό μετά. Π.χ.
    Κώδικας:
    dbus-send --session --dest=org.freedesktop.Notifications \
                            --type=method_call --reply-timeout=10000 \
                            /org/freedesktop/Notifications org.freedesktop.Notifications \
                            string:'Test Application' uint32:0 \
                            string: string:'Notification Title' \
                            string:'This is the body' \
                            array:string: dict:string: int32:10000
    Μην το δοκιμάσεις αυτό, δε δουλεύει.
    Γενικά το dbus είναι φτιαγμένο για «ενδοσυστημική» χρήση κι όχι για τους χρήστες.
  11. Καλό θα είναι μετά την εντολή που σηκώνεις το DE (ή WM) να βάζεις το χαρακτήρα "&" εφόσον θέλεις να δόσεις κι άλλη εντολή. Παράδειγμα:
    Κώδικας:
    exec gnome-session --failsafe &
    exec blah
    έτσι η δεύτερη εντολή θα εκτελεστεί αφού ολοκληρωθεί η πρώτη, στην περίπτωσή μας αφού σηκωθεί το DE.
  12. Soulrain Falls Ο Αντμινιστράτορας

    Δε μπορεί να υπάρξει επόμενη εντολή μετά το exec, παρά μόνο αν αυτό βρίσκεται σε subshell.

    Το ένα «&» στέλνει την εντολή στο background αλλά δεν περιμένει να εκτελεστεί για να τρέξει την επόμενη. Τα δύο «&&» το κάνουν αυτό. Συνηθίζεται στο xinitrc να βάζουμε ένα «&» έπειτα από τις εντολές που θέλουμε να τρέξουν, χωρίς όμως να παρεμβάλλονται στη διαδικασία της εκκίνησης (π.χ. ξεκλείδωμα του keyring, ο compton για το compositing). Όλες όμως μπαίνουν πριν τη γραμμή με το exec, για το λόγο που ανέφερα.

    Αλλά ο Dark το θέλει μόνο για να ξεκινάει τον WM και το έχει άδειο.
  13. Σε μένα έτσι δουλεύει. Σηκώνω πρώτα το idesk (με μονό &), μετά το WM session (επίσης με μονό &) και τελικά το nm-applet. Αν δε χρησιμοποιήσω "&" το applet εκτελείται πριν σηκωθεί η μπάρα του WM και εμφανίζεται μέσα σε ένα ηλίθιο παραθυράκι. Γνωρίζοντας ότι γι αυτό το λόγο υπάρχει το διπλό "&&" αρχικά το δοκίμασα έτσι αλλά δεν...
    Τελικά έτρεξε με τον παραπάνω τρόπο, τον οποίο αν θυμάμαι καλά τον είδα στο forum του arch (νάναι καλά οι geeks).

    Edit: Το ίδιο (σωστό) αποτέλεσμα έχω καλώντας το applet από το startup του WM.
  14. Soulrain Falls Ο Αντμινιστράτορας

    Η βασική διαφορά μεταξύ «&» και «&&» είναι ότι το δεύτερο θα τρέξει την επόμενη εντολή μόνο αν η προηγούμενη ήταν επιτυχής (exit 0). Από εκεί προκύπτει και ότι οι εντολές θα τρέξουν με τη σειρά (ή δε θα τρέξουν καθόλου αν υπάρχει σφάλμα). Με το ένα «&» ξεκινάνε μεν με τη σειρά που τις βλέπει το shell αλλά τρέχουν παράλληλα και μπορεί π.χ. η τρίτη κατά σειρά να ολοκληρωθεί πριν την πρώτη, ενώ δεν υπάρχει και έλεγχος επιτυχούς ολοκλήρωσης

    Όπως τα λες εσύ, υποθέτω ότι βάζεις «&» στη γραμμή του exec. Εφόσον λοιπόν την κάνεις subprocess, μπορείς μετά να τρέξεις άλλη εντολή, με ή χωρίς exec. Για να καταλάβεις τη διαφορά, φτιάξε ένα απλό σκριπτάκι
    Κώδικας:
    #!/usr/bin/env bash
     
    exec κάτι
    echo "κάτι άλλο"
    Αν το τρέξεις έτσι, θα δεις ότι το echo δεν εκτελείται. Αν όμως βάλεις «&» στο exec, θα εκτελεστούν και τα δύο.

    Δεν είναι λάθος αυτό που κάνεις αλλά δε συνηθίζεται γιατί βασικά δε χρειάζονται πολλαπλά exec. Τυπικά στο xinitrc υπάρχει μόνο ένα exec και μπαίνει στο τέλος. Ένα παράδειγμα (δεν είναι δικό μου)
    Κώδικας:
    #!/bin/sh
     
    #------------------------------------------------
    # merge in defaults and keymaps
    #------------------------------------------------
     
    userresources=$HOME/.Xresources
    usermodmap=$HOME/.Xmodmap
    sysresources=/etc/X11/xinit/.Xresources
    sysmodmap=/etc/X11/xinit/.Xmodmap
     
    if [ -f $sysresources ]; then
        xrdb -merge $sysresources
    fi
     
    if [ -f $sysmodmap ]; then
        xmodmap $sysmodmap
    fi
     
    if [ -f "$userresources" ]; then
        xrdb -merge "$userresources"
    fi
     
    if [ -f "$usermodmap" ]; then
        xmodmap "$usermodmap"
    fi
     
    if [ -d /etc/X11/xinit/xinitrc.d ] ; then
    for f in /etc/X11/xinit/xinitrc.d/?*. ; do
      [ -x "$f" ] && . "$f"
    done
    unset f
    fi
     
    #------------------------------------------------
    # x session settings
    #------------------------------------------------
     
    #x cursor
    xsetroot -cursor_name left_ptr &
    #no bell
    xset b off
    #typematic delay/ rate
    xset r rate 200 20
     
    #gnome-keyring
    eval $(/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh)
    export SSH_AUTH_SOCK
    #for uniform qt theme and icons
    export QT_QPA_PLATFORMTHEME="qt5ct"
     
    #------------------------------------------------
    # autostart programs + scripts
    #------------------------------------------------
     
    #/usr/lib/at-spi2-core/at-spi-bus-launcher --launch-immediately &
    #gsettings-data-convert &
    #start-pulseaudio-x11 &
    #xdg-user-dirs-gtk-update &
    #/usr/lib/lxpolkit/lxpolkit &
    /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 &
    setroot -fw ~/dotfiles/resources/blue-ridge-mountain.jpg &
    #setroot --blank-color '#1d1f21'
    #wallch &
    compton -b --config ~/.config/compton.conf &
    #lightsOn 120 &
    redshift &
    #xbacklight -set 75 &
    (sleep 3s && clipit -dn) &
    (sleep 10s && unclutter -b --timeout 30) &
    (sleep 2s && dunst) &
    #(sleep 10s && batnotify) &
    #rofi -key-run Super_L+a -quiet &
    #system-config-printer-applet &
    #blueman-applet &
    #chromium --no-startup-window &
    #caja --no-default-window --no-desktop &
    #qutebrowser --nowindow &
    #mount_home &
    #mpi &
    umd &
     
    #------------------------------------------------
    # start WM/DE
     
    #sxhd &
    #exec bspwm
    exec i3
     
    #i3-shmlog exec i3-with-shmlog
    #i3log exec i3 -V >> ~/.i3log-$(date +'%F-%k-%M-%S') 2>&1  
  15. Το ξέρω σου λέω, χρησιμοποιώ το && στα scripts μου (π.χ. στα conky scripts) και λειτουργεί όπως αναμένεται. Ξεκίνησα το .xinitrc με exec idesk && και παρόλο που έτρεξε την εντολή με επιτυχία δε συνέχισε στην επόμενη. Αντίθετα, σε μια εντολή sleep που δοκίμασα για χρονοκαθυστέρηση, έτρεξε όπως περίμενα.
    Τώρα που το σκέφτομαι έχει βάση, δεδομένου ότι το idesk σηκώνεται και εξακολουθεί να τρέχει (το ίδιο και ο iceWM). Οπότε ήταν λάθος η χρήση της && και ορθή η χρήση της &.
  16. Soulrain Falls Ο Αντμινιστράτορας

    Δεν έχω χρησιμοποιήσει ποτέ iceWM. Γιατί έχει δύο διαφορετικά συστατικά για WM και desktop;
    Αφού όμως το idesk που λες δεν έχει έξοδο, ήταν σωστή η σκέψη σου.
  17. DarkGoth Παιδί για τις δουλειές του Forum

    δεν με μοιαζει καν να τρεξω κατι μετα, γιατι το μονο που το θελω, ειναι να σηκωνει κατι χρησιμο μολις φορτωσει ο xserver (γραφικο αν προκειται για το gnome, window manager αν προκειται για τον ποντικοφαρμακο)... αυτο... τιποτα αλλο... ουτε session startups, ουτε προγραμματα, ουτε τιποτα.

    αυτο το εχω χρησιμοποιησει καναδυο φορες για δοκιμη στον εξομοιωτη, που ηθελα να δω πως μπορει να εχουν «φτιαξει» το webconverger linuks (που σηκωνει μονο εναν firefox, και οταν τον κλεισεις, επανεκκινει το γραφικο και τον ξανασηκωνει). το καταφερα ακριβως το ιδιο, με αυτον τον τροπο:...

    προσθεσα στο τελος του bashrc αυτο:...

    Κώδικας:
    if [ -z "$DISPLAY" ]; then
        startx
    fi
    exit
    
    και μεσα στο xinitrc αυτο:...

    Κώδικας:
    ratpoison --interactive&&
    firefox
    εχω ενεργοποιησει και το autologin στο tty1 (σε αυτο σηκωνω το γραφικο), οποτε εχω ακριβως το webconverger linuks. α, εχω και ενα gif, που δειχνει ακριβως πως φαινεται. βεβαια εχω κανει το λειτουργικο να μοιαζει με παντζουρια 10, γιατι το gif το εχω βαλει σε ενα χιουμοριστικο «αρθρο»-παρωδια για τα παντζουρια 10, αλλα φαινεται πως παει:...
    [IMG]
    Αρέσει σε debianass
  18. Δεν έχει διαφορετικά συστατικά, απλά δεν έχει desktop (το idesk είναι ανεξάρτητο του iceWM). Αρχικά ήθελα μόνο τον iceWM, αργότερα θέλησα να καταστήσω ενεργά κάποια buttons προκειμένου να αλλάζω conky script on the fly. Δεν έχασα τίποτα πάντως, τόσο το idesk όσο και ο icewm είναι πανάλαφρα και παρέχουν όσα χρειάζομαι με το παραπάνω.
    Περίεργο που δεν τον έχεις δοκιμάσει, ο icewm είναι δημοφιλής στους χρήστες arch (και λιγότερο στους χρήστες debian).
  19. DarkGoth Παιδί για τις δουλειές του Forum

    ενταξει, ο τυπος το τερματισε. keymaps, ρυθμισεις μεχρι και στο theme στο γραφικο, κρυπτογραφησεις, ολοκληρη λιστα σαν "xsession". και μετα εβαλε και το γραφικο στο τελος, ετσι για να μην μεινει παραπονεμενο. και ΟΛΑ ΑΥΤΑ μεσα στο ταλαιπωρο xinitrc. μονο εγω λειπω αποκειμεσα
  20. Soulrain Falls Ο Αντμινιστράτορας

    Νόμιζα ότι είχε λειτουργία για desktop και μου φάνηκε περίεργο αφενός μεν το να έχει τέτοια λειτουργία, αφετέρου δε να τη σπάει σε δεύτερο process.

    Εγώ είμαι από εκείνους τους περίεργους που όταν λένε WM σκέφτονται «μόνο tiling». Για τον ίδιο λόγο δε μ' αρέσουν και τα *box. Αν και τώρα τελευταία δεν έχω ασχοληθεί πολύ. Όσο για τη δημοφιλία, αναλόγως που κινείσαι. Αν δεις στο unixporn (όπου βασικά δεν είναι όλοι power users αλλά οι περισσότεροι παίρνουν έτοιμα configs από άλλους και λένε ότι κάτι έκαναν), κυριαρχεί ο i3 -κυρίως λόγω εύκολου config- κι έπειτα bspwm, openbox κλπ.