Gibt es eine einfache Möglichkeit, Schriftarten hinzuzufügen?

Gibt es eine einfache Möglichkeit, Schriftarten hinzuzufügen?

Nachdem ich meine geliebte Gentoo-Installation, die ich seit über 5 Jahren verwende, aufgrund eines Hardwarefehlers verloren habe, bin ich zu FreeBSD gewechselt. Ich hatte das Gefühl, dass dies der nächste logische Schritt in meiner Erkundung und Verwendung von Quellcode-basierten Betriebssystemen war. Beim Lesen allerzugehörige Dokumentation für FreeBSD, während der Installation des XOrg-Servers,5.6 - Verwenden von Schriftarten im XOrg-Abschnitterregte meine Aufmerksamkeit. Als mir klar wurde, dass ich die Zeile nie hinzugefügt hatte:

Section "Files"
   FontPath  "/usr/share/fonts/...."
EndSection

für alle Schriftarten auf meiner Gentoo-Installation verstehe ich jetzt, warum meine DE so beschissen aussah. Da ich ein behinderter Einhandschreiber bin, fällt es mir schwerer, die Schriftarten Files Sectionvon Hand zu bearbeiten, und ich würde es als letzten Ausweg vorziehen, Schriftarten von Hand hinzuzufügen. Gibt es also eine Möglichkeit, die Ausgabe zum fc-list : fileDateibereich hinzuzufügen, xorg.confentweder mit einem von jemandem erstellten Tool, das ich noch nicht gefunden habe, oder mit einem schicken Shell-Skript usw., das die Leser hier so gut erstellen können?

Notiz: Ich verwende nvidia-xconfigzum Generieren meiner xorg.confDatei, es ist also weit entfernt vom heutzutage empfohlenen modularen Ansatz. Kann ich den conf.d-Ansatz bei Bedarf mit der generierten Konfiguration kombinieren?

Antwort1

Wenn ich die Frage richtig verstehe und Sie vim auf dem System installiert haben (das könnte viauch funktionieren, da dies nur exBefehle sind),
wird durch Ausführen des folgenden Befehls in einem Terminal Folgendes erreicht:

  • Datei einlesen: xorg.conf- Ersetzen Sie dies natürlich durch die Datei, die Sie ändern möchten. Hinweis: Diese Datei xorg.confwirdnichtgeändert werden, falls mit dem Skript etwas schief geht.
  • Führen Sie eine Textmanipulation durch
  • Die Ausgabe der Befehle wird in der Datei abgelegt:/tmp/temp_xorg.conf

Wenn Sie nach diesen Vorgängen mit dem Status zufrieden sind, /tmp/temp_xorg.confkönnen Sie ihn an den Speicherort Ihrer echten, funktionierenden Xorg-Konfigurationsdatei kopieren.


Führen Sie die Befehle aus

Führen Sie dies an einer Shell-Eingabeaufforderung aus, um Fontpath-Verzeichnisse in einem Format zu erstellen, das in eine Xorg-Konfigurationsdatei passt (danke an @meuh für diesen Befehl).

fc-list : file | sed -E 's#(.*)/.*#\tFontPath "\1"#' | sort -u > /tmp/filepaths.txt

Führen Sie dann diesen Befehl aus, der die Ausgabe des obigen Befehls übernimmt und in die Abschnitte "Dateien" einfügt

$ vim -e xorg.conf << 'EOF' 
" move cursor to the line with the text: `Section "Files"`
/Section "Files"
" read in the output of `fc-list` at this point
r !fc-list
write /tmp/temp_xorg.conf
EOF

Wenn es also zum Beispiel xorg.confso aussehen würde:

Section "InputClass"
    Identifier  "trackpoint catchall"
    MatchIsPointer  "true"
    MatchProduct    "TrackPoint|DualPoint Stick"
    MatchDevicePath "/dev/input/event*"
    Option  "Emulate3Buttons"   "true"
    Option  "EmulateWheel"  "true"
    Option  "EmulateWheelButton"    "2"
    Option  "XAxisMapping"  "6 7"
    Option  "YAxisMapping"  "4 5"
EndSection

Section "Files"
    Identifier  "trackpoint catchall"
    MatchIsPointer  "true"
    MatchProduct    "TrackPoint|DualPoint Stick"
    MatchDevicePath "/dev/input/event*"
    Option  "Emulate3Buttons"   "true"
    Option  "EmulateWheel"  "true"
    Option  "EmulateWheelButton"    "2"
    Option  "XAxisMapping"  "6 7"
    Option  "YAxisMapping"  "4 5"
EndSection


Section "InputClass"
    Identifier  "trackpoint catchall"
    MatchIsPointer  "true"
    MatchProduct    "TrackPoint|DualPoint Stick"
    MatchDevicePath "/dev/input/event*"
    Option  "Emulate3Buttons"   "true"
    Option  "EmulateWheel"  "true"
    Option  "EmulateWheelButton"    "2"
    Option  "XAxisMapping"  "6 7"
    Option  "YAxisMapping"  "4 5"
EndSection

Nach dem Ausführen des obigen Befehls /tmp/temp_xorg.confsollte es folgendermaßen aussehen:

Section "InputClass"
    Identifier  "trackpoint catchall"
    MatchIsPointer  "true"
    MatchProduct    "TrackPoint|DualPoint Stick"
    MatchDevicePath "/dev/input/event*"
    Option  "Emulate3Buttons"   "true"
    Option  "EmulateWheel"  "true"
    Option  "EmulateWheelButton"    "2"
    Option  "XAxisMapping"  "6 7"
    Option  "YAxisMapping"  "4 5"
EndSection

Section "Files"
    FontPath "/home/ubuntu/.fonts"
    FontPath "/usr/share/fonts/opentype/noto"
    FontPath "/usr/share/fonts/opentype/stix"
    FontPath "/usr/share/fonts/opentype/stix-word"
    FontPath "/usr/share/fonts/truetype"
    FontPath "/usr/share/fonts/truetype/abyssinica"
    FontPath "/usr/share/fonts/truetype/ancient-scripts"
    FontPath "/usr/share/fonts/truetype/dejavu"
    FontPath "/usr/share/fonts/truetype/fonts-guru-extra"
    FontPath "/usr/share/fonts/truetype/freefont"
    FontPath "/usr/share/fonts/truetype/kacst"
    FontPath "/usr/share/fonts/truetype/kacst-one"
    FontPath "/usr/share/fonts/truetype/lao"
    FontPath "/usr/share/fonts/truetype/lato"
    FontPath "/usr/share/fonts/truetype/liberation"
    FontPath "/usr/share/fonts/truetype/lohit-punjabi"
    FontPath "/usr/share/fonts/truetype/nanum"
    FontPath "/usr/share/fonts/truetype/openoffice"
    FontPath "/usr/share/fonts/truetype/padauk"
    FontPath "/usr/share/fonts/truetype/sinhala"
    FontPath "/usr/share/fonts/truetype/takao-gothic"
    FontPath "/usr/share/fonts/truetype/tibetan-machine"
    FontPath "/usr/share/fonts/truetype/tlwg"
    FontPath "/usr/share/fonts/truetype/ttf-khmeros-core"
    FontPath "/usr/share/fonts/truetype/ubuntu-font-family"
    FontPath "/usr/share/fonts/type1/gsfonts"
    FontPath "/usr/share/fonts/X11/Type1"
    Identifier  "trackpoint catchall"
    MatchIsPointer  "true"
    MatchProduct    "TrackPoint|DualPoint Stick"
    MatchDevicePath "/dev/input/event*"
    Option  "Emulate3Buttons"   "true"
    Option  "EmulateWheel"  "true"
    Option  "EmulateWheelButton"    "2"
    Option  "XAxisMapping"  "6 7"
    Option  "YAxisMapping"  "4 5"
EndSection


Section "InputClass"
    Identifier  "trackpoint catchall"
    MatchIsPointer  "true"
    MatchProduct    "TrackPoint|DualPoint Stick"
    MatchDevicePath "/dev/input/event*"
    Option  "Emulate3Buttons"   "true"
    Option  "EmulateWheel"  "true"
    Option  "EmulateWheelButton"    "2"
    Option  "XAxisMapping"  "6 7"
    Option  "YAxisMapping"  "4 5"
EndSection

Antwort2

Für den Konfigurationsteil „Mix and Match“ der Frage ist die Antwort „irgendwie“.

Auf der xorg.confManpage sind die Konfigurationsquellen in der Reihenfolge ihrer Priorität aufgeführt. Dort heißt es: „Wenn dieselben Informationen auf mehr als eine Weise bereitgestellt werden, wird der Mechanismus mit der höchsten Priorität verwendet.“

Nach Beobachtung (da „dieselben Informationen“ und „mehr als eine Möglichkeit“ meines Erachtens in der Manpage nicht klar definiert sind) bedeutet dies, dass Sie einen Abschnitt xorg.conf(wie Section "Files"bei Schriftarten) nicht mit einer xorg.conf.dDatei überschreiben/aktualisieren können, da diese eine niedrigere Priorität hat. Obwohl Dateien mit niedrigerer Priorität gelesen und analysiert werden, werden Abschnittsinhalte für die Abschnitte, die bereits mit höherer Priorität vorhanden sind, stillschweigend ignoriert.

Der aktuelle Nvidia-Treiber (396, nur unter Linux)tutVerwenden Sie jetzt ein Fragment, aber nur für den Linux DRM Xorg-Treiber. Während der Installation xorg.conf.dwird trotzdem eine nahezu monolithische Umgebung erstellt .xorg.conf

Glücklicherweise nvidia-xconfigändert sich dieser Abschnitt nicht, also können Sie ihn, wenn es hilft, auskommentieren xorg.confund in eine oder mehrere Dateien migrieren xorg.conf.d. Mehrere doppelte Abschnitte mit derselben Priorität, d. h. alle in einem einzigen xorg.conf.dVerzeichnis,tutführt wie erhofft zu zusammengeführten Werten.

Eine einfache Möglichkeit zum Generieren der Anweisungen ist:

fc-list -f 'Fontpath "%{file|dirname}"\n' : | sort -u

Dies verwendet die formatierte Ausgabe ( -f) von fc-listum die erforderlichen Konfigurationszeilen zu erstellen, %{file}ist der Dateiname jeder Schriftart, |dirnameist einFilterdas gibt den Verzeichnisnamen aus (genau wie der dirnameShell-Befehl) und dann sort -ufür eindeutige Pfade. Wenn Sie viele Schriftarten haben, möchten Sie die Pfade möglicherweise neu anordnen. Wenn Sie Bitmap-Versionen haben, können Sie die Reihenfolge folgendermaßen ändern:

fc-list -f '    Fontpath "%{file|dirname}"\n' :scalable=true | sort -u
fc-list -f '    Fontpath "%{file|dirname}"\n' :scalable=false | sort -u

Sie können diese Ausgabe nach Bedarf einfügen - oder - als Beispiel aller Schritte (als Root).

# extract Files section from xorg.conf to a separate conf
sed -n '/^Section..Files/,/^EndSection/p' \
  < /etc/X11/xorg.conf > /etc/x11/xorg.conf.d/10-section-files.conf
# comment out Files section in xorg.conf
sed -i.bak '/^Section..Files/,/^EndSection/ s/^/#/' /etc/X11/xorg.conf

# paths for scalable fonts
( echo 'Section "Files"'; 
  fc-list -f '    Fontpath "%{file|dirname}"\n' :scalable=true | sort -u;
  echo 'EndSection' ) > /etc/X11/xorg.conf.d/20-fontpath.conf

# paths for non-scalable fonts
( echo 'Section "Files"'; 
  fc-list -f '    Fontpath "%{file|dirname}"\n' :scalable=False | sort -u;
  echo 'EndSection' ) > /etc/X11/xorg.conf.d/30-fontpath-fixed.conf

Ordnen Sie die Einträge neu an, entfernen Sie bei Bedarf Duplikate und starten Sie X neu.

Der Vollständigkeit halber können Sie die Schriftpfade auch im laufenden Betrieb ändern xset, beispielsweise mit

xset +fp /usr/local/share/fonts/TTF

Überprüfen Sie die aktuellen Pfade mit xset q. Sie können dies ganz einfach ändern, um Ihrem .xinitrcSkript solche Befehle hinzuzufügen, sodass die Schriftpfade unabhängig von nachfolgenden X-Konfigurationsänderungen bestehen bleiben und Sie sich außerdem einen Neustart von X ersparen.

verwandte Informationen