GTK-programok egyedi méretezése — amikor csak egyetlen program betűi vagy ikonjai aprók

enlightened Ez az oldal a közösségért készül. heart Kövess minket máshol is:  Linux Mint Magyar Közösség a Mastodon-on  Telegram csatorna – csak hírek  Beszélgessünk a Telegram – Linux csevegő csoport  Hírek olvasása RSS segítségével  Linux Mint Hivatalos Magyar Közösség a Facebook-on      Linux Mint Baráti Kör a Facebook-on
wink Ha hasznosnak találod, és szeretnéd, hogy folytatódjon, támogasd a munkát Ko-fi vagy Paypal segítségével. laugh

A probléma pontos meghatározása:

Van néhány olyan program a rendszeren, amelyiknek a felülete — betűtípusa, ikonjai, vagy mindkettő — feltűnően kicsi, és ez nem állítható a program saját beállításai közül. A gép többi programja rendben van, a monitor felbontása jó, a asztali környezet (Cinnamon, XFCE, egy suckless-stílusú ablakkezelő stb.) általános méretezése sem hibás — csak ez az egy program „makacs”.

Ez a cikk kifejezetten erről szól: hogyan lehet egyetlen kiválasztott GTK-alapú programot rákényszeríteni nagyobb betűre és/vagy nagyobb ikonokra, úgy, hogy közben minden más program változatlan marad. Az xrandr --dpi, a Cinnamon/GNOME „Megjelenítés méretezése” csúszkája, vagy bármilyen globális HiDPI-beállítás tehát nem tartozik ide — azok az egész munkamenetre hatnak.

A módszer attól függ, hogy az adott program melyik GTK-verzióval készült, mert a három fő verzió (GTK2, GTK3, GTK4) gyökeresen másképp kezeli a méretezést. Biztos, ami biztos: fő a szabványosítás, és a visszamenőleges komplabilitás!

Hogyan deríthető ki, melyik GTK-verziót használja egy program?

ldd $(which programnev) | grep -i gtk

Ha libgtk-x11-2.0.so szerepel a kimenetben, GTK2-ről van szó; libgtk-3.so esetén GTK3, libgtk-4.so esetén GTK4. Ha a program Flatpak-csomagban fut, ehelyett érdemes megnézni a flatpak info --show-runtime <app-id> kimenetét, vagy egyszerűen a lenti „Flatpak-csomagolt programok” szakaszt figyelembe venni.

Gyors áttekintés a három verzióról

  GTK2 GTK3 GTK4
Betűméret külön állítható? Igen, gtkrc-ben Igen, egyéni CSS-témával Igen, egyéni CSS-témával
Ikonméret külön állítható? Igen, gtk-icon-sizes Ténylegesen nem (ld. lentebb) Igen, -gtk-icon-size CSS-tulajdonsággal
Teljes felület (betű+ikon+widget) egyben nagyítható? Részben, témán keresztül Igen, GDK_SCALE Igen, GDK_SCALE (X11 alatt)
Fő eszköz GTK2_RC_FILES GDK_SCALE / GDK_DPI_SCALE / GTK_THEME GTK_THEME, esetleg GDK_SCALE

A táblázat legfontosabb, sokakat meglepő sora a GTK3 ikonmérete: ott a klasszikus beállítás létezik, de a GTK figyelmen kívül hagyja.

Alapfogalmak, amikre a cikk többször hivatkozik

GDK_SCALE — egész szám (1, 2, 3…). Ha be van állítva, a GTK a teljes ablakot ennyiszeresére nagyítja: a betű, az ikonok és minden widget arányosan nagyobb lesz, mintha egy HiDPI kijelzőn futna a program. GTK3-nál és GTK4-nél (X11 hátteret használva) is működik.

GDK_DPI_SCALE — lebegőpontos szám (pl. 0.75, 1.5). Kizárólag a betűtípus DPI-jét, vagyis a szöveg méretét módosítja, az ikonokat és a widgetek méretét nem érinti. Önmagában is használható, de GDK_SCALE-lel kombinálva lehet igazán finomhangolni: pl. GDK_SCALE=2 GDK_DPI_SCALE=0.75 az ikonokat/widgeteket megduplázza, a szöveget viszont csak 1,5-szörösére növeli a duplázáshoz képest.

GTK2_RC_FILES — környezeti változó, amely egy saját gtkrc-fájl (vagy kettőspontokkal elválasztott lista) útvonalára mutat; ez a fájl a GTK2 klasszikus stílus-/beállításfájlja, benne a betűtípus, ikontéma és ikonméretek is megadhatók.

GTK_THEME — környezeti változó GTK3/GTK4 alatt, amely egy adott indításra egy konkrét témát kényszerít. Nem kell teljes, kész témának lennie: elég egy saját mappa gtk-3.0/gtk.css (vagy GTK4-nél gtk-4.0/gtk.css) fájllal, amiben csak azt írjuk le, amit felül akarunk bírálni.

GTK2-es programok

A GTK2 mára hivatalosan lezárt, karbantartás nélküli ág, de még mindig előfordul régebbi eszközöknél (néhány régi Java Swing GTK-look-and-feel, régebbi audio/videó szerkesztők, néhány rendszeradminisztrációs eszköz). A GTK2 a legrugalmasabb a három közül: a gtkrc fájlban a betű és az ikonméret is szabadon állítható.

  1. Hozz létre egy saját gtkrc-fájlt, pl. ~/.config/nagy-gtkrc-2.0 néven:
gtk-font-name = "Sans 14"
gtk-icon-theme-name = "Adwaita"
gtk-icon-sizes = "gtk-menu=24,24:gtk-small-toolbar=24,24:gtk-large-toolbar=32,32:gtk-button=24,24:gtk-dnd=48,48:gtk-dialog=64,64"

A gtk-icon-sizes sorban a GTK2 hat beépített ikon-kategóriája állítható egyenként (szélesség,magasság pixelben): gtk-menu, gtk-button, gtk-small-toolbar, gtk-large-toolbar, gtk-dnd, gtk-dialog.

  1. Indítsd el a programot ezzel a fájllal:
GTK2_RC_FILES=~/.config/nagy-gtkrc-2.0 programnev
  1. Ha az indítás egy menüből/parancsikonról történik, a .desktop-fájl Exec= sorát kell kiegészíteni:
Exec=env GTK2_RC_FILES=/home/felhasznalo/.config/nagy-gtkrc-2.0 /usr/bin/programnev %F

Ha a rendszer .desktop-fájlját nem szabad módosítani, másolj belőle egy saját példányt a ~/.local/share/applications/ alá, és azt szerkeszd.

GTK3-as programok

Itt jön a legtöbb meglepetés. A GTK3 3.10-es verziójától kezdve a gtk-icon-sizes és a gtk-toolbar-icon-size beállítás elavulttá vált, és a GTK egyszerűen figyelmen kívül hagyja — ez hivatalosan dokumentált viselkedés, nem hibaüzenet nélküli mellékhatás. Vagyis GTK3 alatt nincs beállítási kulcs, amivel önmagában, a betűméret érintése nélkül csak az ikonokat lehetne megnagyítani, hacsak a program maga nem kínál erre saját opciót.

1. Teljes felület nagyítása: GDK_SCALE + GDK_DPI_SCALE

Ez a legmegbízhatóbb módszer, ha az ikonok is aprók: mivel az ikonok a widgetekkel együtt nagyítódnak, ez az egyetlen mód GTK3 alatt, ami ikonméretben is érdemi változást hoz.

GDK_SCALE=2 GDK_DPI_SCALE=0.75 programnev

Ez a példa a teljes felületet (ikonokkal, gombokkal együtt) megduplázza, a szöveget viszont csak 1,5-szörösére növeli — érdemes kísérletezni az arányokkal, amíg a betű és az ikon egymáshoz képest is jól néz ki.

2. Csak a betűméret módosítása egyéni CSS-témával

Ha csak a szöveg apró, az ikonok mérete rendben van, egy minimális egyéni témával célzottan, más beállítás érintése nélkül lehet nagyobb betűt kényszeríteni:

mkdir -p ~/.themes/NagyBetu/gtk-3.0
cat > ~/.themes/NagyBetu/gtk-3.0/gtk.css << 'EOF'
* {
    font-size: 14pt;
}
EOF
GTK_THEME=NagyBetu programnev

Mivel a GTK3 témái valójában CSS-fájlok, ez a technika bármilyen más widget-tulajdonságra (pl. padding, min-height) is kiterjeszthető, ha egy adott vezérlőelem marad túl kicsi.

3. XDG_CONFIG_HOME-trükk (csak óvatosan)

A ~/.config/gtk-3.0/settings.ini tartalmazza a gtk-font-name globális beállítást is. Elméletileg egy programra szűkítve is felül lehet bírálni egy saját XDG_CONFIG_HOME megadásával, de ez a változó az adott program teljes konfigurációs mappa-keresését átirányítja, nem csak a gtk-3.0 almappát — vagyis a program saját beállításai (ha azok is a $XDG_CONFIG_HOME alatt laknak) elveszhetnek vagy alapállapotba kerülhetnek. Emiatt a fenti CSS-témás módszer biztonságosabb; ezt a trükköt csak akkor érdemes bevetni, ha tudod, hogy az adott program nem tárol semmi mást a konfigurációs mappájában, vagy ha egy szimbolikus linkekkel felépített, a valós ~/.config tartalmát tükröző mappát használsz XDG_CONFIG_HOME-ként, amibe csak a saját gtk-3.0/settings.ini-t helyezed el ténylegesen.

Wayland alatti korlátozás

GNOME/Mutter Wayland-munkamenetben a GDK_SCALE és a GDK_DPI_SCALE figyelmen kívül marad. Ha a program egyébként X11-kompatibilis, az XWaylanden át való futtatás kényszerítésével a változók újra hatnak:

GDK_BACKEND=x11 GDK_SCALE=2 programnev

(Ez a legtöbb, X11-alapú ablakkezelőt — pl. dwm, i3 — használó rendszeren eleve nem probléma, mert ott a munkamenet maga is X11.)

GTK4-es programok

A GTK4-ben a méretezés filozófiája megváltozott: alapból a kompozitor (Wayland alatt monitoronkénti, 4.14-től akár törtszámú) skálázására támaszkodik, kevésbé „hackelhető” környezeti változókkal. X11 háttér esetén a GDK_SCALE továbbra is működik, ugyanúgy, ahogy GTK3 alatt.

A jó hír: a GTK4 CSS-rendszerébe bekerült egy -gtk-icon-size tulajdonság, ami GTK3-ban nem létezik (ott érvénytelen-tulajdonság hibaüzenetet ad). Ez lehetővé teszi, hogy GTK4 alatt kifejezetten csak az ikonokat nagyítsuk, a betűméret érintése nélkül:

mkdir -p ~/.themes/NagyIkon/gtk-4.0
cat > ~/.themes/NagyIkon/gtk-4.0/gtk.css << 'EOF'
.normal-icons {
    -gtk-icon-size: 32px;
}
.large-icons {
    -gtk-icon-size: 48px;
}
EOF
GTK_THEME=NagyIkon programnev

A betűméret ugyanúgy CSS-sel (font-size) állítható, mint GTK3 alatt, akár ugyanabban a gtk-4.0/gtk.css-ben.

Korlát: sok újabb GNOME-alkalmazás a libadwaita-ra épül, ami saját (Adwaita) témát kényszerít, és bizonyos verziói figyelmen kívül hagyják a GTK_THEME változót, hacsak nem külön kényszerítjük, vagy nem egy erre patchelt libadwaita-változatot használunk. Ilyen programoknál gyakran csak a GDK_SCALE-es, teljes felületet érintő nagyítás marad járható útnak.

Gyakorlati megvalósítás: hogyan induljon el mindig a módosított beállítással

  • Egyszeri teszt terminálból: egyszerűen a program neve elé írva (GDK_SCALE=2 programnev).
  • Tartós megoldás parancsikonhoz/menühöz: a .desktop-fájl Exec= sorának módosítása env-es előtaggal, ahogy a GTK2-es példában is látható:
Exec=env GDK_SCALE=2 GDK_DPI_SCALE=0.75 /usr/bin/programnev %F
  • Wrapper script, ha több változót kényelmesebb egy helyen tartani:
#!/bin/bash
export GDK_SCALE=2
export GDK_DPI_SCALE=0.75
exec /usr/bin/programnev "$@"

Ezt elmentve valahova (pl. ~/bin/programnev-nagy), végrehajthatóvá téve (chmod +x), és a .desktop-fájlban erre a scriptre mutatva a menüből indítás is a kívánt méretezéssel fog történni.

Flatpak-csomagolt programok

Flatpak alatt futó GTK-programoknál a fenti környezeti változók egy sima wrapper scriptből vagy módosított Exec= sorból nem jutnak el a sandboxolt folyamatig — a flatpak run a saját maga által vezérelt környezetet indítja. Helyette a Flatpak saját felülbírálási mechanizmusát kell használni:

flatpak override --user --env=GDK_SCALE=2 --env=GDK_DPI_SCALE=0.75 org.pelda.Alkalmazas

Ez tartósan (minden induláskor) érvényesül; egyszeri teszthez elég a flatpak run --env=... forma is. Ha egyéni CSS-témát (GTK_THEME) próbálsz beállítani egy Flatpak-alkalmazásnál, előfordulhat, hogy a sandbox nem látja a ~/.themes mappát — ekkor a fájlrendszer-hozzáférést is engedélyezni kell:

flatpak override --user --filesystem=~/.themes:ro org.pelda.Alkalmazas

Összefoglalás

  • GTK2: GTK2_RC_FILES + saját gtkrc, benne gtk-font-name és gtk-icon-sizes — mindkettő (betű és ikon) egyenként állítható.
  • GTK3: ikonméretre nincs hivatalos, önálló kapcsoló (a régi beállítás 3.10 óta figyelmen kívül van hagyva); a gyakorlatban vagy a teljes felületet nagyítod (GDK_SCALE + GDK_DPI_SCALE), vagy csak a betűt egy minimális egyéni CSS-témával (GTK_THEME).
  • GTK4: a betű ugyanúgy CSS-sel állítható, de itt már az ikonméretre is van dedikált CSS-tulajdonság (-gtk-icon-size), ami GTK3-ban nem létezik — ez az egyetlen verzió, ahol a betű és az ikon egymástól teljesen függetlenül, célzottan állítható.
  • Wayland alatt (GNOME/Mutter) a GDK_SCALE/GDK_DPI_SCALE nem hat; X11-alapú munkameneteken (pl. dwm, i3, Cinnamon X11-módban) ez nem gond.
  • Flatpak-csomagoknál mindig a flatpak override/flatpak run --env= utat kell használni, sima környezeti változó vagy .desktop-módosítás nem jut el a sandboxig.