Есть ли простой способ добавить шрифты?

Есть ли простой способ добавить шрифты?

После потери любимой установки Gentoo, которой я пользовался более 5 лет, из-за аппаратного сбоя я перешел на FreeBSD. Я чувствовал, что это следующий логический шаг в моем исследовании и использовании операционных систем на основе исходного кода. Читая всесопутствующая документация для FreeBSD, при установке XOrg Server,5.6 - Использование шрифтов в разделе XOrgпривлекло мое внимание. Осознав, что я не добавил строку:

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

для любых шрифтов в моей установке Gentoo, теперь я понимаю, почему мой DE выглядел как дерьмо. Будучи инвалидом-машинистом, мне сложнее редактировать вручную Files Section, и я бы предпочел добавлять шрифты вручную в качестве крайней меры. Таким образом, есть ли способ добавить вывод в 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.


выполните команды

запустите эту команду в командной строке, чтобы создать каталоги fontpaths в формате, который можно поместить в файл конфигурации xorg (спасибо @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руководства источники конфигурации перечислены в порядке приоритета и указано: «Когда одна и та же информация предоставляется несколькими способами, используется механизм с наивысшим приоритетом».

По наблюдениям (поскольку "та же информация" и "более одного способа" четко не определены в man-странице, на мой взгляд), это означает, что вы не можете переопределить/обновить раздел в 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для уникальных путей. Вы можете захотеть изменить порядок путей, если у вас много шрифтов, если у вас есть версии bitmap, вы можете сделать что-то вроде этого, чтобы изменить порядок:

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.

Связанный контент