Client-side decoration (CSD), ügyféloldali dekoráció kikapcsolása

kimarite képe

Az ügyféloldali dekoráció (CSD) az az eljárás, amely lehetővé teszi, hogy egy grafikus alkalmazás legyen felelős a saját ablakdekorációinak megrajzolásáért, ami történelmileg az ablakkezelő feladata.

Néha az ügyféloldali dekorációt olyan alkalmazásokra alkalmazzák, amelyek nem rendelkeznek hagyományos címsorral, azonban ez a kifejezés helytelen használata, mivel még azok az alkalmazások is dekorálhatók, amelyek rendelkeznek egy alap címsorral.

Az ügyféloldali dekoráció helyett a hagyományos szerveroldali dekoráció segítségével az alkalmazások meg tudják rajzolni a saját címsorukat, ami széles lehetőséget kínál az ablakdekorációk testreszabására és további funkciók (grafikus vezérlőelemek) hozzáadására az egyébként tipikus ablakkezelő sávban, sok üres hellyel a maximalizált ablakokban.

A Linux és a Unix-szerű rendszerekben Client-Side Decoration néven hívják az eljárást - amely az X Window System-ből származik - ahol egy ügyfél az az alkalmazás, amely az ablakot rendereli és elküldi az X szervernek. Az alternatívát Server-Side Decoration (SSD) -nek hívják, annak ellenére, hogy X-en a díszítést az ablakkezelő rajzolja, amely valójában nem a „szerver”.

Forrás: https://en.wikipedia.org/wiki/Client-Side_Decoration

gtk3-nocsd

A gtk3-nocsd egy kis modul, amelyt a Gtk+ 3 ügyféloldali dekorációjának letiltására használnak.
## Bevezetés: A Gtk+ 3.10 verzió óta a fejlesztők hozzáadtak egy úgynevezett fejlécet vagy egyéni címsort az ablak dekorációhoz. Ezzel és az ügyféloldali díszítéssel az ablakkezelő által biztosított eredeti címsort és ablakszegélyt a Gtk+ letiltja. Ezáltal az összes Gtk+ 3 alkalmazás ugyanilyen kinézetű lesz. Még rosszabb, hogy mindez összeomlaszthat néhány ablakkezelőt vagy összetevőt.
Sajnos, a Gtk+ fejlesztői úgy döntöttek, hogy ellentmondanak a meglévő szabványoknak,  „nincs lehetőség” a CSD kikapcsolására.
Szerencsére a gtk3-nocsd alkalmazással még mindig van módunk (részben) kikapcsolni a CSD-t. Az ablakkezelő ablak vezérlése (a címsor és az ablakszegély megjelenítése) újra engedélyezhető.

Forrás: https://github.com/PCMan/gtk3-nocsd

Client-side decoration (CSD)

Az ügyféloldali dekorációt (Client-side decoration) jellemzően a GNOME 3 (GNOME Shell) asztali környezet használja. Az eljárás következményeképpen a GNOME alkalmazások ablakai - bármely más asztali környezet használatakor - látható megjelenésükben nem követik a rendszeren beállított témát, az ablakkezelő által biztosított eredeti címsort és ablakszegélyt, így eltérő megjelenésük zavaró lehet.

GNOME fejlesztés például a Lemezkezelő alkalmazás...

Nézzük, hogyan néz ki az ablak, az LXDE/LXQt asztali környezetnél (a háttérben a „2048 Game” ablak, ahhoz lehet hasonlítani):

Nézzük, hogyan néz ki az ablak, a gtk3-nocsd alkalmazás telepítése (és a rendszer újraindítása) után a Cinnamon asztali környezetnél:

A Client-side decoration (CSD) kikapcsolásához telepítsd a gtk3-nocsd alkalmazást (terminálban):

sudo apt-get install gtk3-nocsd

... és indítsd újra a rendszert. Az újraindítás helyett a ki- és bejelentkezés is elegendő a beállítás érvényesítéséhez.

Enjoy :-)

Hasznos

Ha valami még „nem kerek”...

A lentebb látható leírás segítségével, annak szöveges beállításaiban be kell helyettesíteni a megfelelő elérési utat a libgtk3-nocsd.so.0 fájlhoz!

Rákeresés (terminálban):

sudo find / -name libgtk3-nocsd.so.0

Példa, a találattal (Debian 10 Buster, 64 bites rendszer):

LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libgtk3-nocsd.so.0

... a kacsacsőr nem kell.

Leírás

#How to use:

  • gtk3-nocsd should work with all Gtk+ 3 versions.

  • Install necessary packages:

    • On Debian-based systems (including Ubuntu and Mint), install pkg-config, libgtk-3-dev, libgirepository1.0-dev.

    • On Fedora-based distros (including RHEL, CentOS), install pkgconfig, gtk3-devel, gtk+-devel, gobject-introspection-devel.

  • Build the code. Run make from command line. After this you'll have the files gtk3-nocsdand libgtk3-nocsd.so.0 in the same directory.

  • Now to run individual Gtk+ 3 apps (say gedit) using this hack, use the command ./gtk3-nocsd gedit from the same directory.

  • To have all Gtk+ 3 apps (of current user) use this hack, export some environment variables in your ~/.bashrc:

      export GTK_CSD=0
      export LD_PRELOAD=<"full path" of your libgtk3-nocsd.so.0 file>
    
  • On Arch Linux, you should use ~/.xsession instead of ~/.bashrc for the CSDs to be disabled properly.

  • On Debian-based systems with graphical login, instead modify (or create) ~/.xsessionrc and add the following code:

      if [ -n "$STARTUP" ]; then
        BASESTARTUP=${STARTUP%% *}
        BASESTARTUP=${BASESTARTUP##*/}
        if [ "$BASESTARTUP" = x-session-manager ]; then
          BASESTARTUP=$(basename $(readlink /etc/alternatives/x-session-manager))
        fi
        if [ x"$BASESTARTUP" = x"${BASESTARTUP#gnome-session}" ] ; then
          export GTK_CSD=0
          STARTUP="env LD_PRELOAD=/path/to/libgtk3-nocsd.so.0 $STARTUP"
        fi
      fi
    

    gtk3-nocsd is now packaged for Debian though (see below), so manual installation may not be necessary.

  • Re-login to make the environment variables take effect.

  • Hooray! GTK+ 3 client-side decorations are disabled now.

#Distribution packages:

gtk3-nocsd is packaged in Debian's unstable and testing distributions, see gtk3-nocsd in Debian's package database. The Debian package already comes with integration code to automatically disable CSDs when installed, so after package installation only a re-login is required to have CSDs disabled on non-GNOME desktops.

There is also a gtk3-nocsd-git package for Arch Linux.

#How it works:

$LD_PRELOAD is used to override several Gdk and glib/gobject APIs to intercept related calls Gtk+ 3 uses to setup CSDs. For older versions of Gtk+ 3, while it is trying to initialize CSDs, it is led to believe that there is no compositor available, so CSDs are not added. For later Gtk+ 3 versions (3.16.1+), the gtk_window_set_titlebar method is reimplemented, as tricking Gtk+ 3 into thinking the compositor is disabled has side effects and is not sufficent anymore.

Additionally, as gtk_window_set_titlebar is also called from Gtk+ internally (and LD_PRELOAD cannot override function calls within a library), several other places in Gtk+3 (e.g. buildable interfaces for GtkWindow and GtkDialog) are also overridden to ensure that CSDs are disabled.

Forrás: https://github.com/PCMan/gtk3-nocsd

Hozzászólások

Ez nagyon jól jött

Nem tudtam hogy sok alkalmazás miért jelenik meg teljesen másképp, nagyon kapóra jött a cikk.
Itt az ékes bizonyíték  :-)  Konkréatan ez a gyári Szoftvertelepítő, előtte-utána. 
https://mega.nz/file/skpWQC4R#KP-avr2J20N2ap0SaiUyMyHQ0-ZyQYA6SvV7ThR3R7s 

Köszönöm  megoldást.

Értékelés: 

0
Még nincs értékelve
kimarite képe

Ez nagyon jól jött

#1 Szívesen.

Értékelés: 

0
Még nincs értékelve