X 논리적 글꼴 설명 및 HiDPI

X 논리적 글꼴 설명 및 HiDPI

질문:X-server는 고정 해상도로 글꼴을 제공합니다.100dpi, 현재 윈도우 시스템 해상도( ) 대신 xdpyinfo | grep -F resolution.

약간의 이론. X 서버 자체 또는 별도의 서버에서 네트워크(TCP 또는 UNIX 소켓을 통해)를 통해 X 클라이언트로 전송되는 일부 레거시 서버측 글꼴이 있습니다.XFont 서버(단일 또는 다중). 일반적인 클라이언트측 글꼴(Xft, GTK 2+, Qt 2+)과 달리 "서버" 백엔드(또는CoreX 글꼴백엔드)는 앤티앨리어싱을 지원하지 않지만 네트워크 투명성을 지원합니다(즉, 알파 채널이 없는 비트맵이 네트워크를 통해 전송됨). 응용 프로그램 수준에서는 서버측 글꼴이 다음과 같이 지정되지 않습니다.XftFontStruct(가장 일반적으로 친숙한 것으로 번역됨 DejaVu Sans Mono:size=12:antialias=true)XLFD. 로컬 시스템에 대해 말하면 동일한 글꼴 파일을 두 글꼴 백엔드에 동시에 등록할 수 있으며 최신 GTK 및 Qt 기반 애플리케이션은 물론 레거시 애플리케이션(Xt, Athena, Motif, GTK 1.2)에서도 사용할 수 있습니다. , Qt 1.x).

역사적으로 래스터 서버측 글꼴( *.pcf)이 있었고 래스터에는 고유한 해상도가 있었습니다(윈도우 시스템 해상도와 반드시 동일할 필요는 없음). 따라서 XLFD에는 RESOLUTION_X및 와 같은 필드가 있습니다 RESOLUTION_Y. 래스터 글꼴이 화면에 렌더링될 때 보기 흉하지 않고 요청된 래스터화된 문자 크기( )를 유지하려면 PIXEL_SIZE래스터 해상도가 화면 해상도에 가까워야 하므로 래스터 글꼴은 일반적으로 기본 해상도로 제공됩니다.75dpi그리고100dpi(이것이 우리가 여전히 and etc 디렉토리를 갖고 있는 이유입니다 /usr/share/fonts/X11/75dpi) /usr/share/fonts/X11/100dpi. 따라서 다음 줄은 동일한 12pt 글꼴을 나타냅니다.

-bitstream-charter-bold-r-normal--12-120-75-75-p-75-iso8859-1
-bitstream-charter-bold-r-normal--17-120-100-100-p-107-iso8859-1

래스터화된 글리프 크기는 다음과 같습니다.

  • 12픽셀존재하다75dpi, 그리고
  • 17픽셀존재하다100dpi, 각각.

그러나 래스터 글꼴 외에도 벡터 또는 윤곽선 글꼴(트루타입,열려 있는,어도비 타입 1)은 어떤 요소로든 크기를 조정할 수 있으며 화면에 렌더링해도 여전히 좋아 보입니다. 일부 X 서버 구현(특히,새로운 태양)도 지원합니다어도비 타입 3Turing-complete를 사용하여 글리프를 설명하는 형식추신언어.

물론 래스터 해상도의 개념은 벡터 글꼴에는 적용되지 않으므로 및 필드에 0( 0) 또는 별표( )를 요청할 수 *있으며 이론적으로 내 X 서버는 내가 요청한 글꼴을 정확하게 제공해야 합니다. 이는 직접적으로RESOLUTION_XRESOLUTION_Y아치 리눅스 위키위의 기사 링크:

확장 가능한 글꼴은 크기를 조정할 수 있도록 설계되었습니다. 확장 가능한 글꼴 이름(아래 예 참조)은 픽셀 및 포인트 크기 필드, 두 해상도 필드 및 평균 너비 필드에서 0을 갖습니다.

...

특정 크기의 확장 가능한 글꼴을 지정하려면 POINT_SIZE이 필드에 값만 제공하면 되며 다른 크기 관련 값은 0으로 둘 수 있습니다. 값 POINT_SIZE은 1/10 포인트 단위이므로 입력한 값은 원하는 포인트 크기에 10을 곱한 값이어야 합니다.

따라서 다음 두 쿼리 중 하나가 반환되어야 합니다.12시 Courier New창 시스템 해상도의 글꼴:


-monotype-courier new-medium-r-normal--*-120-*-*-m-*-iso10646-1
-monotype-courier new-medium-r-normal--0-120-0-0-m-0-iso10646-1

아니면 나는 그렇게 생각했다.. 문제는 96...115dpi 모니터에서162dpi4k 모니터에서 신중하게 선택한 벡터 글꼴이 갑자기 너무 작아지는 것을 발견했습니다.

RESOLUTION_XRESOLUTION_Y필드를 명시적으로 설정하지 않는 한162(제대로 된 정신을 가진 사람은 아무도 이렇게 하지 않을 것입니다. Xresources모니터를 바꿀 때마다 수십 줄을 다시 작성해야 합니다.) 그런 다음 X 서버는 기본적으로 글꼴을 다음과 같이 렌더링합니다.100dpi바꾸다162. 사이의 차이번호 17그리고27픽셀(배수 1.62 = 162 / 100)이 매우 눈에 띕니다. 이것은 현대적인 예이다데비안 10상자:

데비안 10, Courier New 12pt, 162dpi

나는 이 회귀 현상이 사람들이 X11에서 쓸모없는 하위 시스템을 점차적으로 제거한 결과라고 생각합니다.딘 우디, 2002년에 출시된 2.2 커널에서도 똑같은 내용이 보입니다.

데비안 3, Courier New 12pt, 162dpi

유일한 차이점은딘 우디분명히 네트워크를 통해 비트맵을 보내기 전에 서버 측에서 힌트를 적용하면 글꼴이 "더 깔끔한" 방식으로 렌더링됩니다.

그래서 이것은 반품이 아닙니다. 이 문제는 지속되며 모든 벡터 글꼴 유형에 동일하게 영향을 미칩니다(트루타입,열려 있는,유형 1).

이제 질문은. 각 개별 리소스에 대한 사용자 설정에 윈도우 시스템 해상도를 하드코딩하지 않고 저자가 권장하는 것보다 더 쉽게 이 문제를 해결할 수 있는 방법이 있습니까?시스템 간 X 리소스 공유기사?

libfreetypeX 서버 자체의 전역 구성이나 이것이 의존하는 라이브러리( , ) 를 변경하면 문제를 해결할 수 있나요 libxfont?

관련 정보