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 Section
von 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 : file
Dateibereich hinzuzufügen, xorg.conf
entweder 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-xconfig
zum Generieren meiner xorg.conf
Datei, 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 vi
auch funktionieren, da dies nur ex
Befehle 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 Dateixorg.conf
wirdnichtgeä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.conf
kö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.conf
so 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.conf
sollte 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.conf
Manpage 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.d
Datei ü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.d
wird 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.conf
und in eine oder mehrere Dateien migrieren xorg.conf.d
. Mehrere doppelte Abschnitte mit derselben Priorität, d. h. alle in einem einzigen xorg.conf.d
Verzeichnis,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-list
um die erforderlichen Konfigurationszeilen zu erstellen, %{file}
ist der Dateiname jeder Schriftart, |dirname
ist einFilterdas gibt den Verzeichnisnamen aus (genau wie der dirname
Shell-Befehl) und dann sort -u
fü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 .xinitrc
Skript 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.