在硬體故障而失去了我心愛的 5 年多的 Gentoo 安裝後,我轉向了 FreeBSD。我覺得這是我探索和使用基於原始程式碼的作業系統的下一個合乎邏輯的步驟。在閱讀所有FreeBSD 的相關文檔,在安裝 XOrg Server 時,5.6 - 在 XOrg 部分使用字體吸引了我的注意。意識到我從未添加過這一行:
Section "Files"
FontPath "/usr/share/fonts/...."
EndSection
對於我的 Gentoo 安裝上的任何字體,我現在明白為什麼我的 DE 看起來很糟糕。作為一名殘疾的單手打字員,我手動編輯打字變得更加困難Files Section
,我更願意手動添加字體作為最後的手段。因此,有沒有一種方法可以使用我尚未找到的某人創建的工具或這裡的讀者非常擅長製作的一些精美的 shell 腳本等將輸出添加fc-list : file
到文件部分?xorg.conf
筆記:我用來nvidia-xconfig
產生我的xorg.conf
文件,所以它與當今推薦的模組化方法相去甚遠。如果需要,我可以將 conf.d 方法與生成的配置混合併匹配嗎?
答案1
如果我理解這個問題,並且您在系統上安裝了 vim(這vi
也可以使用,因為這些只是ex
命令)
在終端機上運行以下命令,將:
- 讀入檔案:
xorg.conf
- 顯然將其替換為您要修改的檔案。注意:該文件xorg.conf
將不是進行修改,以防腳本出現問題。 - 進行一些文字操作
- 命令的輸出將放置在文件中:
/tmp/temp_xorg.conf
如果在這些操作之後,您對狀態感到滿意,/tmp/temp_xorg.conf
則可以將其複製到真實的、工作的 xorg 設定檔的位置。
運行命令
在 shell 提示字元下執行此命令以產生 fontpaths 目錄,該目錄的格式可以放入 xorg conf 檔案中(感謝 @meuh 提供此命令)。
fc-list : file | sed -E 's#(.*)/.*#\tFontPath "\1"#' | sort -u > /tmp/filepaths.txt
然後運行此命令,該命令將獲取上述命令的輸出並將其插入到「檔案」部分
$ 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
例如,如果xorg.conf
看起來像這樣:
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
運行上述命令後/tmp/temp_xorg.conf
應如下所示:
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
答案2
對於問題的配置“混合和匹配”部分 - 答案是“有點”。
手冊xorg.conf
頁按優先順序列出了配置來源,並指出「以多種方式提供相同資訊時,將使用最高優先級機制」。
透過觀察(在我看來,由於“相同資訊”和“不止一種方式”在手冊頁中沒有明確定義),這意味著您無法使用文件覆蓋/更新xorg.conf
(例如Section "Files"
字體)中的部分xorg.conf.d
,因為優先級較低。儘管讀取並解析了較低優先權的文件,但對於那些已存在較高優先權的節,節內容將被默默地忽略。
目前的 Nvidia 驅動程式(396,僅在 Linux 上)做現在使用xorg.conf.d
片段,但僅適用於 Linux DRM Xorg 驅動程序,它仍然在安裝過程中創建近乎整體的片段xorg.conf
。
幸運的是,nvidia-xconfig
不會更改此部分,因此如果有幫助,您可以將其註解掉xorg.conf
並將其移轉到一個或多個xorg.conf.d
文件中。具有相同優先權的多個重複部分,即全部位於單一xorg.conf.d
目錄中,做結果如所希望的合併值。
產生指令的簡單方法是:
fc-list -f 'Fontpath "%{file|dirname}"\n' : | sort -u
這使用格式化輸出(-f
)來fc-list
建立所需的配置行,%{file}
是每個字體的檔案名,|dirname
是篩選輸出目錄名稱(與dirname
shell 指令完全相同),然後sort -u
輸出唯一路徑。如果您有很多字體,您可能想要重新排序路徑,如果您有點陣圖版本,您可以執行以下操作來重新排序:
fc-list -f ' Fontpath "%{file|dirname}"\n' :scalable=true | sort -u
fc-list -f ' Fontpath "%{file|dirname}"\n' :scalable=false | sort -u
您可以根據需要貼上該輸出 - 或者 - 作為所有步驟的範例(以 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
如果需要,請重新排序並刪除重複項,然後重新啟動 X。
為了完整起見,您也可以使用 即時修改字型路徑xset
,例如
xset +fp /usr/local/share/fonts/TTF
使用 檢查目前路徑xset q
。您可以簡單地修改它以將此類命令新增至.xinitrc
腳本中,以便字體路徑獨立於任何後續的 X 配置變更而持續存在,並且也可以儲存重新啟動 X。