![32픽셀보다 큰 TTY 글꼴을 사용하세요.](https://linux55.com/image/169677/32%ED%94%BD%EC%85%80%EB%B3%B4%EB%8B%A4%20%ED%81%B0%20TTY%20%EA%B8%80%EA%BC%B4%EC%9D%84%20%E2%80%8B%E2%80%8B%EC%82%AC%EC%9A%A9%ED%95%98%EC%84%B8%EC%9A%94..png)
나는 HiDPI 노트북을 가지고 있는데 32픽셀은 너무 작아서 편안하게 읽을 수 없습니다. 더 큰 글꼴을 찾을 수 없어서 직접 만들기로 결정했습니다.
이는 높이가 32px 이하인 모든 글꼴에 대해 작동하지만 더 큰 글꼴은 setfont에 의해 거부됩니다.
> file FC-32.psf
FC-32.psf: Linux/i386 PC Screen Font v2 data, 256 characters, Unicode directory, 32x16
> file FC-33.psf
FC-33.psf: Linux/i386 PC Screen Font v2 data, 256 characters, Unicode directory, 33x16
> # -----------
> setfont ./FC-32.psf
> # 32 is fine
> setfont ./FC-33.psf
Bad character height 33
> # (It also reject reasonable numbers like 48 and 64)
내 글꼴에 문제가 있는 걸까요? 내가 뭐 잘못 했어요? 이것이 Linux 콘솔의 하드 제한입니까? 제한 사항에 대한 언급이나 더 큰 글꼴의 예를 찾을 수 없습니다.
사용된 테스트 파일 및 스크립트
아래에는 글꼴을 생성하는 스크립트가 나와 있습니다. .otf
특정 글꼴을 구성 가능한 높이로 변환 합니다 .psf.gz
. 수학은 시행착오를 거치며 FiraCode에만 해당될 수 있습니다.
요청 시 테스트 파일을 제공할 수도 있습니다.
#!/bin/zsh
# Based on this: https://unix.stackexchange.com/questions/161890/how-can-i-make-a-psf-font-for-the-console-from-a-otf-one
H=32 # <- FONT HEIGHT
PTS=12
(( W=H*5/10 ))
(( WIDTH = W*10 ))
(( DPI=H*60/PTS ))
COUNT=256
OUT=FC
otf2bdf -r $DPI -p $PTS -c C ./FiraCode-Regular.otf \
| sed -e "s/AVERAGE_WIDTH.*/AVERAGE_WIDTH $WIDTH/" \
> "$OUT.bdf"
bdf2psf --fb "$OUT.bdf" \
/usr/share/bdf2psf/standard.equivalents \
/usr/share/bdf2psf/ascii.set+/usr/share/bdf2psf/useful.set \
$COUNT "$OUT.psf"
gzip "$OUT.psf" -f
답변1
이 제한 사항이 사용자 관련 문서에 명시적으로 문서화되어 있는지는 확실하지 않지만 커널에 포함되어 있습니다. 이것설명하다fbcon_set_font
설명하다:
/*
* User asked to set font; we are guaranteed that
* a) width and height are in range 1..32
* b) charcount does not exceed 512
* but lets not assume that, since someone might someday want to use larger
* fonts. And charcount of 512 is small for unicode support.
*
* However, user space gives the font in 32 rows , regardless of
* actual font height. So a new API is needed if support for larger fonts
* is ever implemented.
*/
그리고fbcon_get_font
32줄 단위로 문자를 처리합니다.
if (font->width <= 8) {
j = vc->vc_font.height;
for (i = 0; i < font->charcount; i++) {
memcpy(data, fontdata, j);
memset(data + j, 0, 32 - j);
data += 32;
fontdata += j;
}
(8픽셀보다 넓은 글꼴에 대해서도 유사한 처리가 수행됩니다.)