System-Schrift unter Linux auslesen.

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

System-Schrift unter Linux auslesen.

Beitrag von balu »

Hallo liebe Gemeinde,

ich habe da jetzt mal ein spezielles Linux Problem. Und zwar möchte ich gerne in Linux die eingestellten System-Schriften auslesen. Um genau zu sein folgende Schriften bei den Einstellungen:

-> Schriftart in Anwendungen
-> Dokumenten-Schrift
-> Desktop-Schrift
-> Schrift in Fenstertiteln
-> Dicktengleiche Schrift

Die sind ja zu finden unter:
- Erscheinungsbild-Einstellungen
- Reiter Schriftarten

Nach einer Standardinstallation steht ja bei den ersten drein überall nur "Sans", und bei den anderen beiden "Sans Bold" und "Monospace".

Irgendwo hatte ich mal in einem Linux-Forum gelesen, dass Sans eigentlich nur ein Symbolischer Link (oder so ähnlich) zu der wirklichen Schrift ist. Und ferner hatte ich auch dort gelesen, dass es sich dabei um die Schrift "Liberation Sans" handelt. Nur hatte ich jetzt durch eine frische Fedora 11 Installation festgestellt, dass es sich bei mir nicht um Liberation handelt, obwohl sie vorhanden ist.

Also wie kann ich mir die Schriften für die eingangs aufgezählten Kategorien ausgeben lassen? Theoretisch müssten für mich eigentlich nur die ersten beiden Wichtiug sein.

Da ich mich mit Linux, und deren Umgebungs- und Systemvariablen noch nicht so auskenne, hoffe ich das ihr mir weiterhelfen könnt.

Freue mich auf Eure Antworten, und bedanke mich schon mal für Eure Bemühungen.


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: System-Schrift unter Linux auslesen.

Beitrag von Karolus »

Hallo Balu
Hier: (KDE-desktop auf Suse11.4 ) finden sich diese Einstellungen in der ~/.kderc und evtl. noch für gtk-anwendungen in der ~/.gtkrc-2.0-kde4

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: System-Schrift unter Linux auslesen.

Beitrag von komma4 »

balu hat geschrieben:ich habe da jetzt mal ein spezielles Linux Problem.
Und was hat das mit OOo zu tun?
balu hat geschrieben:Die sind ja zu finden unter:
- Erscheinungsbild-Einstellungen
- Reiter Schriftarten
Das ist distributionsabhängig.

KDE:
~/.kde/share/config/kdeglobals
/usr/share/config/kdeglobals
/etc/share/config/kdeglobals
~/.kde/share/config/kcmfonts
/usr/share/config/kcmfonts
/etc/share/config/kcmfonts
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: System-Schrift unter Linux auslesen.

Beitrag von balu »

Hallo Karo und Winfried.

Erstmal Danke für Eure Antworten.
Name hat geschrieben: Und was hat das mit OOo zu tun?
Ein fettes Sorry, das ich jetzt auch mal zu ungenau war :oops: . Es war doch schon recht früh am morgen, man möge es mir bitte verzeihen.

Ich möchte in OOo per Makro die genannten Kategorien mit den eingestellten Schriften auslesen, falls das möglich ist. Ich stell mir das in etwa so vor.

Code: Alles auswählen

Sub SystemFonts
MsgBox Environ("DokumentenSchrift")
MsgBox Environ("SchriftartInAnwendungen")
End Sub
Ich hoffe das es jetzt verständlicher ist.


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: System-Schrift unter Linux auslesen.

Beitrag von komma4 »

balu hat geschrieben:Ich möchte in OOo per Makro die genannten Kategorien mit den eingestellten Schriften auslesen
Das wird so nicht möglich sein.

Mit einem ENVIRON Befehl kannst Du gesetzte Umgebungsvariablen auslesen. Bei mit ist dort von Schriften nichts zu sehen (set >/tmp/set.vars & kate /tmp/set.vars)
balu hat geschrieben:"DokumentenSchrift"
Was soll das sein?
balu hat geschrieben:"SchriftartInAnwendungen"
Auch da fehlt mir das Verständnis...


Kurz und gut: bei einem KDE-System findest Du die Einstellungen beim Benutzer (~/.kde4/share/config/kdeglobals). Und was willst Du dann damit machen? "Auslesen" - schön und gut, aber dann?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: System-Schrift unter Linux auslesen.

Beitrag von balu »

Hallo Winfried,
komma4 hat geschrieben:
balu hat geschrieben:"DokumentenSchrift"
Was soll das sein?
Mein Code sollte nur grob darstellen wie ich mir das auslesen vorstellte. Da ich nicht die englischen, besser gesagt die Systemnamen für die gesuchten Kategorien kenne, hatte ich einfach stellvertretend die deutschen Kategorienamen dort eingesetzt.


komma4 hat geschrieben: Das wird so nicht möglich sein.

Mit einem ENVIRON Befehl kannst Du gesetzte Umgebungsvariablen auslesen. Bei mit ist dort von Schriften nichts zu sehen
Okay, damit wäre dieser Punkt (Environ) dann schon mal abgeklärt. Ich kann unter Fedora da auch nichts finden.

komma4 hat geschrieben: Und was willst Du dann damit machen? "Auslesen" - schön und gut, aber dann?
Es geht dabei um diesem Thread hier im Linux-Unterforum. Unterschiedliche Dialoggrößen zwischen Linux Systemen?
Ganz grob zusammengefasst:
Ich hab 2 PCs einen mit WinXP und OOo 3.2.1 und dort eine V-Box mit Fedora 11 und OOo 3.1.0.
Und einen PC mit Fedora 11 und OOo 3.1.0 richtig installiert.
Unter Win hatte ich Dateien mit diversen Dialogen erstellt, die später ihren Einsatzort auf nem anderem Fedora PC mit OOo 3.1.0 finden.

Und nun hat sich herausgestellt, das die Dialoggrößen auf beiden Fedoras stark von einander abweichen. Diese Abweichungen betragen aber nicht vielleicht 5 oder 10 Pixel, sondern um weit über 100 Pixel. Was natürlich extrem viel ist.

Mittlerweile weiß ich das jetzt nur noch ein Kriterium unter Linux dafür verantwortlich ist, dass die Dialoge unterschiedliche Größen haben. Und das sind die Schriften bei den Einstellungen. Und dort besonders die Schrift die sich hinter
-> Schriftart in Anwendungen
verbirgt.

Jetzt möchte ich gerne den genauen Namen der Schrift und nicht den Symbolischen (oder wie auch immer) herausbekommen, um damit ich diese Schrift hier bei mir auch einstellen kann.

Und wenn ich per Makro in OOo die Schrift auslesen kann, und diese sich von der unterscheidet unter der die Dateien erstellt wurden, könnte ich dann in diesem Falle z.B. eine Meldung ausgeben die darauf hinweist das man bitte die Schrift umstellt.

Ist jetzt mein Vorhaben verständlicher?

Ach so!
Unter Fedora ist nicht KDE, sondern Gnome der Desktop. Und da bin ich momentan noch selber am suchen wo sich die Einstellungen verbergen. Ich kann deshalb momentan mit euren Pfadangaben nicht viel anfangen. Aber dennoch Danke dafür, da sie mir wohl die Grobe Suchrichtung vorgeben.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: System-Schrift unter Linux auslesen.

Beitrag von komma4 »

Du kannst dem Anwender generell einen Hinweis geben, dass er die Schrift ändern soll, wenn nichts zu lesen ist (oder der Dialog nicht wie in der als PDF :wink: mitgelieferten Dokumentation abgebildet aussieht)
balu hat geschrieben:am suchen wo sich die Einstellungen verbergen
Ändere die Einstellung und dann suche auf der Kommandozeile nach geänderten Dateien (der letzten drei Minuten):

Code: Alles auswählen

find -type f -cmin 3
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: System-Schrift unter Linux auslesen.

Beitrag von balu »

Hallo Winfried, und alle anderen.
komma4 hat geschrieben: Du kannst dem Anwender generell einen Hinweis geben, dass er die Schrift ändern soll, wenn nichts zu lesen ist (oder der Dialog nicht wie in der als PDF :wink: mitgelieferten Dokumentation abgebildet aussieht)
Eine Doku kommt natürlich auch noch dran -{davor graut mir noch mehr als vor den Makro Problemen}-. Dort werd ich dann meine gesammelten Informationen die das "Layout" beeinflussen können genauer auflisten. Und das sind momentan nicht grad wenige.


Aber jetzt ist erstmal für mich das Thread-Thema wichtig, damit ich voran komme.

Und nun ein Danke schön für dein Kommandozeilen-Befehl.
Ich bin jetzt einen kleinen Schritt weiter, der mir aber momentan nicht sehr viel hilft.

Auf dem Fedora PC habe ich nun herausgefunden wo die Einstellungen für -> Schriftart in Anwendungen gespeichert werden.

Code: Alles auswählen

./.gconf/desktop/gnome/interface/%gconf.xml
Aber so wirklich hilfreich ist das noch immer nicht, denn bei einer Änderung der Schriftart bekomme ich noch immer nicht das gewünschte Ergebnis. Hier die Ausgangslage der %gconf.xml (auszugsweise).

Code: Alles auswählen

<?xml version="1.0"?>
<gconf>
	<entry name="font_name" mtime="1310646419" type="string">
		<stringvalue>Sans 10</stringvalue>
	</entry>
[...]
</gconf>
Und bei Änderung auf Schriftart "Nimbus Sans L 11" ändert sich nur der Schriftart-Name (und die mtime).

Code: Alles auswählen

<?xml version="1.0"?>
<gconf>
	<entry name="font_name" mtime="1310645848" type="string">
		<stringvalue>Nimbus Sans L 11</stringvalue>
	</entry>
[...]
</gconf>
Und so gesehen bringt mir das ganze wohl momentan gar nichts.

Also hatte ich zwischenzeitlich mal ein bisschen im WWW recherchiert, aber nur mit einem winzig kleinen Erfolg. Denn jetzt weiß ich durch eine PDF-Datei, dass das mit der eingestellten Systemschrift noch umfangreicher ist, als gedacht.

Die Zentrale Anlaufstelle dafür wäre nämlich eigentlich die fonts.conf unter /etc/fonts/. So steht es dort. Und diese Datei sollte dann ungefähr so aussehen, auszugsweise.

Code: Alles auswählen

<!--
Provide required aliases for standard names
-->
   <alias>
      <family>serif</family>
          <prefer>
             <family>DejaVu Serif</family>
             <family>Bitstream Vera Serif</family>
                        ...
                        ...
            </prefer>
  </alias>
  <alias>
    <family>sans-serif</family>
        <prefer>
             <family>DejaVu Sans</family>
             <family>Bitstream Vera Sans</family>
			 <family>Tahoma</family>
                        ...
                        ...
        </prefer>
 </alias>
 <alias>
   <family>monospace</family>
        <prefer>
        <family>DejaVu Sans Mono</family>
       <family>Bitstream Vera Sans Mono</family>
                        ...
                        ...
        </prefer>
</alias>
Okay, die Datei habe ich auch gefunden, aber sie hat überhaupt keine Ähnlichkeit mit dem gezeigten Beispiel. Denn in der finde ich wohl als erstes einen Hinweis darauf, das diese Datei nicht geändert werden darf, und stattdessen eine local.conf gilt. So fern ich mich nicht vertue.
fonts.conf hat geschrieben: DO NOT EDIT THIS FILE.
IT WILL BE REPLACED WHEN FONTCONFIG IS UPDATED.
LOCAL CHANGES BELONG IN 'local.conf'.
Ferner steht dort auch nur folgendes, bezüglich der Schrtarten (auszugsweise).
fonts.conf hat geschrieben: Accept deprecated 'sans' alias, replacing it with 'sans-serif'
-->
<match target="pattern">
<test qual="any" name="family">
<string>sans</string>
</test>
<edit name="family" mode="assign">
<string>sans-serif</string>
</edit>
</match>

<!--
Also habe ich mir jetzt auch noch mal die local.conf, genauer gesagt die 51-local.conf angeschaut. Mit folgendem Ergebnis. Diesmal der gesamte Inhalt!
51-local.conf hat geschrieben: <?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<!-- Load local system customization file -->
<include ignore_missing="yes">local.conf</include>
</fontconfig>
Aber auch das bringt mich nicht weiter. Also hab ich mir noch die fonts.dtd mal kurz angeschaut.
Hier ungekürzt.

Code: Alles auswählen

<!-- This is the Document Type Definition for font configuration files -->
<!ELEMENT fontconfig (dir | 
		      cache | 
		      cachedir |
		      include | 
		      config |
		      selectfont |
		      match | 
		      alias)* >

<!-- 
    Add a directory that provides fonts
-->
<!ELEMENT dir (#PCDATA)>
<!ATTLIST dir xml:space (default|preserve) 'preserve'>

<!--
    Define the per-user file that holds cache font information.

    If the filename begins with '~', it is replaced with the users
    home directory path.
-->
<!ELEMENT cache (#PCDATA)>
<!ATTLIST cache xml:space (default|preserve) 'preserve'>

<!--
    Add a directory that is searched for font cache files.
    These hold per-directory cache data and are searched in
    order for each directory. When writing cache files, the first
    directory which allows the cache file to be created is used.

    A leading '~' in a directory name is replaced with the users
    home directory path.
-->
<!ELEMENT cachedir (#PCDATA)>
<!ATTLIST cachedir xml:space (default|preserve) 'preserve'>

<!--
    Reference another configuration file; note that this
    is another complete font configuration file and not
    just a file included by the XML parser.

    Set 'ignore_missing' to 'yes' if errors are to be ignored.

    If the filename begins with '~', it is replaced with the users
    home directory path.
-->
<!ELEMENT include (#PCDATA)>
<!ATTLIST include
	  ignore_missing    (no|yes)		"no"
	  xml:space	    (default|preserve)	"preserve">

<!--
    Global library configuration data
 -->
<!ELEMENT config (blank|rescan)*>

<!--
    Specify the set of Unicode encoding values which
    represent glyphs that are allowed to contain no
    data.  With this list, fontconfig can examine
    fonts for broken glyphs and eliminate them from
    the set of valid Unicode chars.  This idea
    was borrowed from Mozilla
 -->
<!ELEMENT blank (int)*>

<!--
    Aliases are just a special case for multiple match elements

    They are syntactically equivalent to:

    <match>
	<test name="family">
	    <string value=[family]/>
	</test>
	<edit name="family" mode="prepend">
	    <string value=[prefer]/>
	    ...
	</edit>
	<edit name="family" mode="append">
	    <string value=[accept]/>
	    ...
	</edit>
	<edit name="family" mode="append_last">
	    <string value=[default]/>
	    ...
	</edit>
    </match>
-->
<!--
    Periodically rescan the font configuration and
    directories to synch internal state with filesystem
 -->
<!ELEMENT rescan (int)>

<!--
    Edit list of available fonts at startup/reload time
 -->
<!ELEMENT selectfont (rejectfont | acceptfont)* >

<!ELEMENT rejectfont (glob | pattern)*>

<!ELEMENT acceptfont (glob | pattern)*>

<!ELEMENT glob (#PCDATA)>

<!ELEMENT pattern (patelt)*>

<!ENTITY % constant 'int|double|string|matrix|bool|charset|const'>

<!ELEMENT patelt (%constant;)*>
<!ATTLIST patelt
	  name CDATA	#REQUIRED>

<!ELEMENT alias (family*, prefer?, accept?, default?)>
<!ATTLIST alias
	  binding (weak|strong|same) "weak">
<!ELEMENT prefer (family)*>
<!ELEMENT accept (family)*>
<!ELEMENT default (family)*>
<!ELEMENT family (#PCDATA)>
<!ATTLIST family xml:space (default|preserve) 'preserve'>

<!ENTITY % expr 'int|double|string|matrix|bool|charset
		|name|const
		|or|and|eq|not_eq|less|less_eq|more|more_eq|contains|not_contains
		|plus|minus|times|divide|not|if|floor|ceil|round|trunc'>

<!--
    Match and edit patterns.

    If 'target' is 'pattern', execute the match before selecting a font.
    if 'target' is 'font', execute the match on the result of a font
    selection.
-->
<!ELEMENT match (test*, edit*)>
<!ATTLIST match
	  target (pattern|font|scan) "pattern">

<!--
    Match a field in a pattern

    if 'qual' is 'any', then the match succeeds if any value in the field matches.
    if 'qual' is 'all', then the match succeeds only if all values match.
    if 'qual' is 'first', then the match succeeds only if the first value matches.
    if 'qual' is 'not_first', then the match succeeds only if any value other than
    	the first matches.
    For match elements with target=font, if test 'target' is 'pattern',
    then the test is applied to the pattern used in matching rather than
    to the resulting font.

    Match elements with target=scan are applied as fonts are scanned.
    They edit the pattern generated from the scanned font and affect
    what the fontconfig database contains.
-->
<!ELEMENT test (%expr;)*>
<!ATTLIST test 
	  qual (any|all|first|not_first)    "any"
	  name CDATA	    #REQUIRED
	  target (pattern|font|default)		"default"
	  compare (eq|not_eq|less|less_eq|more|more_eq|contains|not_contains)	"eq">

<!--
    Edit a field in a pattern

    The enclosed values are used together to edit the list of values
    associated with 'name'.

    If 'name' matches one of those used in a test element for this match element:
	if 'mode' is 'assign', replace the matched value.
	if 'mode' is 'assign_replace', replace all of the values
	if 'mode' is 'prepend', insert before the matched value
	if 'mode' is 'append', insert after the matched value
	if 'mode' is 'prepend_first', insert before all of the values
	if 'mode' is 'append_last', insert after all of the values
    If 'name' doesn't match any of those used in a test element:
	if 'mode' is 'assign' or 'assign_replace, replace all of the values
	if 'mode' is 'prepend' or 'prepend_first', insert before all of the values
	if 'mode' is 'append' or 'append_last', insert after all of the values
-->
<!ELEMENT edit (%expr;)*>
<!ATTLIST edit
	  name CDATA	    #REQUIRED
	  mode (assign|assign_replace|prepend|append|prepend_first|append_last) "assign"
	  binding (weak|strong|same) "weak">

<!--
    Elements of expressions follow
-->
<!ELEMENT int (#PCDATA)>
<!ATTLIST int xml:space (default|preserve) 'preserve'>
<!ELEMENT double (#PCDATA)>
<!ATTLIST double xml:space (default|preserve) 'preserve'>
<!ELEMENT string (#PCDATA)>
<!ATTLIST string xml:space (default|preserve) 'preserve'>
<!ELEMENT matrix (double,double,double,double)>
<!ELEMENT bool (#PCDATA)>
<!ELEMENT charset (#PCDATA)>
<!ATTLIST charset xml:space (default|preserve) 'preserve'>
<!ELEMENT name (#PCDATA)>
<!ATTLIST name xml:space (default|preserve) 'preserve'>
<!ELEMENT const (#PCDATA)>
<!ATTLIST const xml:space (default|preserve) 'preserve'>
<!ELEMENT or (%expr;)*>
<!ELEMENT and (%expr;)*>
<!ELEMENT eq ((%expr;), (%expr;))>
<!ELEMENT not_eq ((%expr;), (%expr;))>
<!ELEMENT less ((%expr;), (%expr;))>
<!ELEMENT less_eq ((%expr;), (%expr;))>
<!ELEMENT more ((%expr;), (%expr;))>
<!ELEMENT more_eq ((%expr;), (%expr;))>
<!ELEMENT contains ((%expr;), (%expr;))>
<!ELEMENT not_contains ((%expr;), (%expr;))>
<!ELEMENT plus (%expr;)*>
<!ELEMENT minus (%expr;)*>
<!ELEMENT times (%expr;)*>
<!ELEMENT divide (%expr;)*>
<!ELEMENT not (%expr;)>
<!ELEMENT if ((%expr;), (%expr;), (%expr;))>
<!ELEMENT floor (%expr;)>
<!ELEMENT ceil (%expr;)>
<!ELEMENT round (%expr;)>
<!ELEMENT trunc (%expr;)>
Und nun habe ich keinen Durchblick mehr. Hab jetzt vollends die Orientierung verloren :roll:.
So wie ich es mir vorgestellt hatte, geht es nicht. Es gibt keine "einfache" Methode die System-Schrift auszulesen. Ich gebs auf.


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Antworten