<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Dusko Pijetlovic</title>
    <description>Dusko Pijetlovic - My Personal Web Space</description>
    <link>https://duskopijetlovic.github.io/</link>
    <atom:link href="https://duskopijetlovic.github.io/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Sun, 07 Jun 2026 03:16:08 +0000</pubDate>
    <lastBuildDate>Sun, 07 Jun 2026 03:16:08 +0000</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
    
      <item>
        <title>Replicate FVWM3&apos;s 9 Desks in Wayland GNOME on RHEL 10.2</title>
        <description>&lt;p&gt;AKA  Replicate FVWM3 with 9 Virtual Desktops in Wayland GNOME on RHEL 10.2&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;fix-9-static-workspaces&quot;&gt;Fix 9 Static Workspaces&lt;/h2&gt;

&lt;p&gt;GNOME defaults to dynamic workspaces (creates/destroys them automatically).
Disable that and set to 9 workspaces.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ gsettings set org.gnome.mutter dynamic-workspaces false
$ gsettings set org.gnome.desktop.wm.preferences num-workspaces 9
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;set-keyboard-shortcuts-to-switch-directly-to-each-desk&quot;&gt;Set Keyboard Shortcuts to Switch Directly to Each Desk&lt;/h2&gt;

&lt;p&gt;GNOME only binds a few workspaces by default.
Set all 9:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ for i in $(seq 1 9); do
  gsettings set org.gnome.desktop.wm.keybindings \
    switch-to-workspace-$i &quot;[&apos;&amp;lt;Super&amp;gt;$i&apos;]&quot;
done
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;move-a-window-to-a-specific-workspace-optional&quot;&gt;Move a Window to a Specific Workspace (Optional)&lt;/h2&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ for i in $(seq 1 9); do
  gsettings set org.gnome.desktop.wm.keybindings \
    move-to-workspace-$i &quot;[&apos;&amp;lt;Super&amp;gt;&amp;lt;Shift&amp;gt;$i&apos;]&quot;
done
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;fvwmpager-equivalent---visual-pager&quot;&gt;FvwmPager Equivalent - Visual Pager&lt;/h2&gt;

&lt;h3 id=&quot;install-gnome-shell-extension-workspace-indicator&quot;&gt;Install GNOME Shell Extension: “Workspace Indicator”&lt;/h3&gt;

&lt;p&gt;This extension shows the current workspace number/name in the top bar.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ dnf search gnome-shell-extension
. . .
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Here’s what’s directly relevant to my 9-workspace setup:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ sudo dnf install \
  gnome-shell-extension-workspace-indicator \
  gnome-shell-extension-dash-to-panel \
  gnome-shell-extension-auto-move-windows \
  gnome-shell-extension-windowsNavigator \
  gnome-extensions-app
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ gnome-extensions enable workspace-indicator@gnome-shell-extensions.gcampax.github.com
$ gnome-extensions enable dash-to-panel@jderose9.github.com
$ gnome-extensions enable auto-move-windows@gnome-shell-extensions.gcampax.github.com
$ gnome-extensions enable windowsNavigator@gnome-shell-extensions.gcampax.github.com
Extension “workspace-indicator@gnome-shell-extensions.gcampax.github.com” does not exist
Extension “dash-to-panel@jderose9.github.com” does not exist
Extension “auto-move-windows@gnome-shell-extensions.gcampax.github.com” does not exist
Extension “windowsNavigator@gnome-shell-extensions.gcampax.github.com” does not exist
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The extensions installed fine; however, GNOME Shell hasn’t picked up the newly installed extensions yet because they were installed after your session started.&lt;/p&gt;

&lt;p&gt;Restart GNOME Shell to load them.
Log out and back in:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ gnome-session-quit --logout
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Or simply log out from the system menu and log back in.&lt;/p&gt;

&lt;p&gt;After logging back in, verify and enable the newly installed GNOME extensions.&lt;/p&gt;

&lt;p&gt;See all available extensions (including newly installed ones):&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ gnome-extensions list --active
background-logo@fedorahosted.org

$ gnome-extensions list --inactive
auto-move-windows@gnome-shell-extensions.gcampax.github.com
windowsNavigator@gnome-shell-extensions.gcampax.github.com
workspace-indicator@gnome-shell-extensions.gcampax.github.com
dash-to-panel@jderose9.github.com
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then, enable each one using the UUID from the output above.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ gnome-extensions enable dash-to-panel@jderose9.github.com
$ gnome-extensions enable auto-move-windows@gnome-shell-extensions.gcampax.github.com
$ gnome-extensions enable windowsNavigator@gnome-shell-extensions.gcampax.github.com
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Verify:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ gnome-extensions list --active
auto-move-windows@gnome-shell-extensions.gcampax.github.com
windowsNavigator@gnome-shell-extensions.gcampax.github.com
dash-to-panel@jderose9.github.com
background-logo@fedorahosted.org

# Or:

$ gnome-extensions list --enabled
auto-move-windows@gnome-shell-extensions.gcampax.github.com
windowsNavigator@gnome-shell-extensions.gcampax.github.com
dash-to-panel@jderose9.github.com
background-logo@fedorahosted.org
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Disable dash-to-panel’s app shortcuts (keep &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Super+N&lt;/code&gt;).&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ gsettings list-recursively org.gnome.shell.extensions.dash-to-panel | grep -i hot | grep -i overlay
org.gnome.shell.extensions.dash-to-panel hotkeys-overlay-combo &apos;TEMPORARILY&apos;

$ gsettings set org.gnome.shell.extensions.dash-to-panel hotkeys-overlay-combo &apos;NEVER&apos;

$ gsettings get org.gnome.shell.extensions.dash-to-panel hotkeys-overlay-combo
&apos;NEVER&apos;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Temporarily disable &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dash-to-panel&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ gnome-extensions disable dash-to-panel@jderose9.github.com
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Disable (clear) all &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;switch-to-application&lt;/code&gt; bindings:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ for i in $(seq 1 9); do
  gsettings set org.gnome.shell.keybindings switch-to-application-$i &quot;[]&quot;
done
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hotkeys-overlay-combo&lt;/code&gt; ‘NEVER’ hides the visual number overlay but it doesn’t remove the actual key grabs in this version.&lt;/p&gt;

&lt;p&gt;Find dash-to-panel’s shortcut settings:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ dconf dump /org/gnome/shell/extensions/dash-to-panel/
---- snip ----
hot-keys=true
---- snip ----
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The master switch is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hot-keys=true&lt;/code&gt;, and because of that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dash-to-panel&lt;/code&gt;’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;app-hotkey-N&lt;/code&gt; is active and conflicts with workspace and move-to-workspace.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;app-hotkey-N       -&amp;gt; &amp;lt;Super&amp;gt;N (conflicts with workspace switching)
app-shift-hotkey-N -&amp;gt; &amp;lt;Shift&amp;gt;&amp;lt;Super&amp;gt;N (conflicts with move-to-workspace)
app-ctrl-hotkey-N  -&amp;gt; &amp;lt;Ctrl&amp;gt;&amp;lt;Super&amp;gt;N
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Disable the master switch (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hot-keys&lt;/code&gt;):&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ gsettings set org.gnome.shell.extensions.dash-to-panel hot-keys false
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Re-enable &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dash-to-panel&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ gnome-extensions enable dash-to-panel@jderose9.github.com
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;My final configuration:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;+---------------------+------------------------------------------------+
| static 9 workspaces | gsettings / mutter                             |
| Super+1–9           | switch to workspace N                          |
| Super+Shift+1–9     | move window to workspace N                     |
| dash-to-panel       | panel with workspace switcher (hot-keys=false) |
| auto-move-windows   | assign apps to specific workspaces             |
| windowsNavigator    | keyboard selection in Activities overview      |
+---------------------+------------------------------------------------+
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;remaining-things-worth-configuring&quot;&gt;Remaining Things Worth Configuring&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auto-move-windows&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gnome-extensions-app&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ gnome-extensions-app
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Find Auto Move Windows, click the gear icon, and assign applications to specific workspace numbers.&lt;/p&gt;

&lt;p&gt;This is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Style * StartsOnDesk&lt;/code&gt; equivalent (on FVWM3/FVWM).&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Enable Workspace Indicator&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gnome-extensions-app&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ gnome-extensions-app
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Click on ‘Workspace Indicator’ - Enable it.
Then, click on the three vertical dots menu (Settings) &amp;gt; Under ‘Indicator’, select ‘Workspace Name’.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Workspace Names - If You Want Named Desks Like in FVWM3&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ gsettings set org.gnome.desktop.wm.preferences workspace-names \
    &quot;[&apos;1&apos;, &apos;2&apos;, &apos;3&apos;, &apos;4&apos;, &apos;5&apos;, &apos;6&apos;, &apos;7&apos;, &apos;8&apos;, &apos;9&apos;]&quot;

$ gsettings get org.gnome.desktop.wm.preferences workspace-names
[&apos;1&apos;, &apos;2&apos;, &apos;3&apos;, &apos;4&apos;, &apos;5&apos;, &apos;6&apos;, &apos;7&apos;, &apos;8&apos;, &apos;9&apos;]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;export-dash-to-panels-settings&quot;&gt;Export Dash to Panel’s Settings&lt;/h2&gt;

&lt;p&gt;Right-click the panel -&amp;gt; Dash to Panel Settings. 
Click ‘About’ - under ‘Export and Import’, click ‘Export to file’.&lt;/p&gt;

&lt;hr /&gt;
</description>
        <pubDate>Sun, 07 Jun 2026 02:00:13 +0000</pubDate>
        <link>https://duskopijetlovic.github.io/wayland/x11/xorg/cli/terminal/shell/dotfiles/sysadmin/howto/unix/2026/06/07/wayland-gnome-replicate-fvwm3-with-9-desks.html</link>
        <guid isPermaLink="true">https://duskopijetlovic.github.io/wayland/x11/xorg/cli/terminal/shell/dotfiles/sysadmin/howto/unix/2026/06/07/wayland-gnome-replicate-fvwm3-with-9-desks.html</guid>
        
        
        <category>wayland</category>
        
        <category>x11</category>
        
        <category>xorg</category>
        
        <category>cli</category>
        
        <category>terminal</category>
        
        <category>shell</category>
        
        <category>dotfiles</category>
        
        <category>sysadmin</category>
        
        <category>howto</category>
        
        <category>unix</category>
        
      </item>
    
      <item>
        <title>FreeBSD 15 ZFS, RHEL 10, Windows 11 Triple Boot [UEFI GPT]</title>
        <description>&lt;p&gt;The three OSs for this configuration: FreeBSD 15, RHEL 10, Windows 11 Professional.&lt;/p&gt;

&lt;p&gt;PC: Lenovo ThinkPad E14 Gen 6 laptop AMD model, Type (Machine Type or MT) 21M3 - customized&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Configure FreeBSD and Windows dual-boot as explained in this post:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/zfs/freebsd/windows/boot/howto/cli/terminal/shell/disk/2025/02/26/uefi-gpt-zfs-manual-freebsd-win-dual-boot.html&quot;&gt;FreeBSD ZFS and Windows 11 Dual Boot [UEFI GPT] [Manual Setup]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Plug in a bootable USB flash drive with the RHEL 10.1 installer and boot from it.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;GRUB version 2.12
  Install Red Hat Enterprise Linux 10.1

Langauge
  English

Keyboard
  English (Canada)

Installation Destination
  Corsair MP600 MICRO - nvme1n1 / 822.5 GiB free

Full disk summary and boot loader...
  Selected Disks and Boot Loader
    Corsair MP600 MICRO (Corsair_MP600_MICRO_AA4GB439003RGY_1)

Root Account
  - Enable Root Account
  - Root Pasword: ************
  - [X] Allow root SSH login with password

Time &amp;amp; Date
  Americas/Vancouver timezone  ## ** Autodeteced - I didn&apos;t need to change anything

Network &amp;amp; Host Name
  Connected: enp2s0            ## ** Autodeteced - I didn&apos;t need to change anything
  Host Name: rhel.home.arpa   -&amp;gt;  Clicked &apos;Apply&apos;

Software Selection
  Changed from
    Server with GUI
  To
    Workstation
  Additional Software for Selected Environment
    Backup Client
    Headless Management
    Remote Desktop Clients
    Legacy UNIX Compatibility
    Console Internet Tools
    Container Management
    Development Tools
    Graphical Administration Tools
    Scientific Support
    Security Tools
    System Tools

User Creation
  - Full name: dusko
  - User name: dusko
  - [X] Add administrative privileges to this user account (wheel group membership)
  - [X] Require a password for this account

Begin Installation

------------------

Red Hat Enterprise Linux is now succefully installed and ready for you to use!

Go ahead and reboot your system to start using it!

(Use of this product is subject to the license agreement at /usr/share/redhat-license/EULA)

Clicked &apos;Reboot System&apos;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;After reboot:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;GRUB version 2.12

Red Hat Enterprise Linux (6.12.0-124.8.1.el10_1.x86_64) 10.1 (Coughlan)
Red Hat Enterprise Linux (0-rescue-cf00eadc488c4103b67539f044a271ef) 10.1 (Coughlan)
Windows Boot Manager (on /dev/nvme1n1p1)
UEFI Firmware Settings
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;When you press &lt;strong&gt;F12&lt;/strong&gt; for &lt;strong&gt;Boot Menu&lt;/strong&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ThinkPad

Boot Menu

Red Hat Enterprise Linux 
FreeBSD
Windows Boot Manager
NVMe0: Corsair MP600 MICRO 
NVMe1: Samsung SSD 990 EVO Plus 2TB
PXE BOOT
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Register for Red Hat Developer Subscription for Individuals at:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://developers.redhat.com/&quot;&gt;Red Hat Developer Portal&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After registering for Red Hat Developer Subscription, register your system:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ sudo subscription-manager register \
 --username &amp;lt;your_username&amp;gt; --password &amp;lt;your_password&amp;gt; --auto-attach
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Update all packages - kernel, glibc, OpenSSL, systemd, everything - to the latest versions available in the RHEL repos.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ sudo dnf upgrade
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Is reboot required?
In this case, it was required:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ sudo needs-restarting -r
Updating Subscription Management repositories.
Core libraries or services have been updated since boot-up:
  * glibc
  * kernel
  * kernel-core
  * linux-firmware
  * microcode_ctl
  * systemd

Reboot is required to fully utilize these updates.
More information: https://access.redhat.com/solutions/27943
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;To list the affected systemd services:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ sudo needs-restarting -s
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Restart the system.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ sudo shutdown -r now
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;For personal machines, especially laptops, you can run:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ fwupdmgr get-updates 

$ sudo fwupdmgr update
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;For servers, as of May 2026, it’s recommended &lt;strong&gt;not&lt;/strong&gt; to enable LVFS (Linux Vendor Firmware Service) and &lt;strong&gt;not&lt;/strong&gt; to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fwupdmgr(1)&lt;/code&gt;. 
For enterprise servers, use their own purpose-built, &lt;em&gt;out-of-band&lt;/em&gt; firmware management tools that don’t require the host OS at all (aka &lt;strong&gt;Remote Server Management&lt;/strong&gt;):&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;+--------+----------------------------------------------------+
| Vendor | Tool                                               |
+--------+----------------------------------------------------+
| Lenovo | XClarity Controller (XCC) + XClarity Administrator | [*] 
+--------+----------------------------------------------------+
| HP/HPE | iLO (Integrated Lights-Out)                        | [*]
+--------+----------------------------------------------------+
| Dell   | iDRAC (Integrated Dell Remote Access Controller)   | [*] [**]
+--------+----------------------------------------------------+
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;These tools operate independently of the OS, and you can flash firmware even when the server won’t boot. 
In contrast, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fwupdmgr(1)&lt;/code&gt; runs inside the host OS.&lt;/p&gt;

&lt;p&gt;[*] &lt;a href=&quot;https://www.linkedin.com/posts/nimesh-shah-50306335_techawareness-dellservers-hpilo-share-7346879942036447234-Tqsh/&quot;&gt;Lenovo XClarity vs. HP iLO vs. Dell iDRAC - Remote Server Management - Post - LinkedIn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[**] &lt;a href=&quot;https://www.dell.com/support/kbdoc/en-us/000134013/dell-poweredge-update-the-firmware-of-single-system-components-remotely-using-the-idrac&quot;&gt;PowerEdge: How to Update Firmware Remotely Using the iDRAC Web Interface - Dell&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://access.redhat.com/solutions/4078831&quot;&gt;How do I get the no-cost Red Hat Enterprise Linux Developer Subscription or renew it?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://developers.redhat.com/&quot;&gt;Red Hat Developer Portal&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://developers.redhat.com/products/rhel/getting-started&quot;&gt; Getting Started Guide - Get Started with Red Hat Enterprise Linux&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Getting Started Guide covers downloading and installing Red Hat Enterprise Linux on a physical system or virtual machine (VM) using your choice of VirtualBox, VMware, Microsoft Hyper-V, or Linux KVM/Libvirt.&lt;/p&gt;

      &lt;p&gt;Beginner&lt;/p&gt;
      &lt;ul&gt;
        &lt;li&gt;Learning paths - Cheat sheets - Articles &amp;amp; blogs - Interactive labs - Red Hat Customer Portal labs - Interactive demos&lt;/li&gt;
      &lt;/ul&gt;

      &lt;p&gt;Intermediate&lt;/p&gt;
      &lt;ul&gt;
        &lt;li&gt;Learning paths - Cheat sheets - E-books - Articles &amp;amp; blogs - Interactive labs - Red Hat Customer Portal labs - Interactive demos&lt;/li&gt;
      &lt;/ul&gt;

      &lt;p&gt;Advanced&lt;/p&gt;
      &lt;ul&gt;
        &lt;li&gt;Learning paths - Cheat sheets - Articles &amp;amp; blogs - Interactive labs - Red Hat Customer Portal labs&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/posts/nimesh-shah-50306335_techawareness-dellservers-hpilo-share-7346879942036447234-Tqsh/&quot;&gt;Lenovo XClarity vs. HP iLO vs. Dell iDRAC - Remote Server Management - Post - LinkedIn&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.dell.com/support/kbdoc/en-us/000134013/dell-poweredge-update-the-firmware-of-single-system-components-remotely-using-the-idrac&quot;&gt;PowerEdge: How to Update Firmware Remotely Using the iDRAC Web Interface - Dell&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://servermall.com/blog/idrac-vs-ilo-vs-ipmi-remote-management/&quot;&gt;iDRAC vs. iLO vs. XCC (XClarity Controller) vs. IPMI: Remote Server Management Explained&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

</description>
        <pubDate>Sat, 30 May 2026 20:12:33 +0000</pubDate>
        <link>https://duskopijetlovic.github.io/zfs/freebsd/rhel/linux/windows/boot/howto/cli/terminal/shell/disk/2026/05/30/uefi-gpt-zfs-freebsd-rhel-win-triple-boot.html</link>
        <guid isPermaLink="true">https://duskopijetlovic.github.io/zfs/freebsd/rhel/linux/windows/boot/howto/cli/terminal/shell/disk/2026/05/30/uefi-gpt-zfs-freebsd-rhel-win-triple-boot.html</guid>
        
        
        <category>zfs</category>
        
        <category>freebsd</category>
        
        <category>rhel</category>
        
        <category>linux</category>
        
        <category>windows</category>
        
        <category>boot</category>
        
        <category>howto</category>
        
        <category>cli</category>
        
        <category>terminal</category>
        
        <category>shell</category>
        
        <category>disk</category>
        
      </item>
    
      <item>
        <title>How to Scroll in VT (Virtual Terminal) on FreeBSD and Linux</title>
        <description>&lt;p&gt;AKA: Scrollback in VT (Virtual Terminal) (text console, the system console, tty)&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;freebsd-scrollback-in-vt---scroll-lock-key&quot;&gt;FreeBSD: Scrollback in VT - Scroll Lock Key&lt;/h2&gt;

&lt;p&gt;On FreeBSD, to scroll back in VT (virtual terminal), you need to press the &lt;strong&gt;Scroll Lock&lt;/strong&gt; key, then scroll up and down with the &lt;strong&gt;arrow keys&lt;/strong&gt;.
To scroll up or down a full screen at a time, use the &lt;strong&gt;Page Up&lt;/strong&gt; and &lt;strong&gt;Page Down&lt;/strong&gt; keys.&lt;/p&gt;

&lt;h3 id=&quot;if-keyboard-doesnt-have-scroll-lock-key&quot;&gt;If Keyboard doesn’t have Scroll Lock Key&lt;/h3&gt;

&lt;p&gt;If your keyboard doesn’t have a Scroll Lock key, it very likely uses a special function key sequence to access Scroll Lock.&lt;/p&gt;

&lt;p&gt;On my wired split mechanical keyboard, Mistel Barocco MD770, you can activate Scroll Lock by pressing &lt;strong&gt;Fn + [{&lt;/strong&gt; (the key to the right of ‘P’).&lt;/p&gt;

&lt;h2 id=&quot;alternative---remap-keys-key-remapping&quot;&gt;Alternative - Remap Keys (Key Remapping)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://www.freebsddiary.org/kbdcontrol.php&quot;&gt;Changing your keyboard mapping - FreeBSD Diary&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://lists.freebsd.org/pipermail/freebsd-questions/2007-September/158918.html&quot;&gt;Keyboard without Scroll Lock - freebsd-questions mailing list&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://serverfault.com/questions/420324/how-can-i-scroll-back-the-output-in-freebsds-console-without-scroll-lock&quot;&gt;How can I scroll back the output in FreeBSD’s console without Scroll Lock? - serverfault&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;linux-software-scrollback-was-removed-in-version-59-of-the-kernel&quot;&gt;Linux: Software Scrollback was Removed in version 5.9 of the Kernel&lt;/h2&gt;

&lt;p&gt;On Linux, Scrollback via Shift+PageUp and Shift+PageDown is no longer supported on console terminals by kernels newer than version 5.9.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=973c096f6a85e5b5f2a295126ba6928d9a6afd45&quot;&gt;vgacon (the VGA soft scrollback): remove software scrollback support - Linux kernel source tree&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=50145474f6ef4a9c19205b173da6264a644c7489&quot;&gt;fbcon: remove soft scrollback code - Linux kernel source tree&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;alternatives---use-a-terminal-multiplexer-or-less1-or-kmscon&quot;&gt;Alternatives - Use a Terminal Multiplexer or less(1) or KMSCon&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Use a terminal multiplexer; for example, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tmux(1)&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;screen(1)&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;less(1)&lt;/code&gt; program.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of course, by the time you launch &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tmux(1)&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;screen(1)&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;less(1)&lt;/code&gt;, the message you need may have already scrolled out of view.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://cgit.freedesktop.org/~dvdhrm/kmscon/plain/README&quot;&gt;KMSCon&lt;/a&gt; offers perhaps a better alternative by serving as a system console terminal emulator that captures all output from the start, avoiding this timing issue.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more about KMSCon, see the References section below.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://man.freebsd.org/cgi/man.cgi?vt&quot;&gt;vt(4) – virtual terminal system video console driver – FreeBSD Manual Pages&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Scrolling Back
  Output that has scrolled off the screen can be reviewed by pressing the
  Scroll Lock key, then scrolling up and down with the arrow keys.

  The Page Up and Page Down keys scroll up or down a full screen at a time.

  The Home and End keys jump to the beginning or end of the scrollback buffer.
 
  When finished reviewing, press the Scroll Lock key again to return to 
  normal use.  

  Some laptop keyboards lack a Scroll Lock key, and use a special function 
  key sequence (such as Fn + K) to access Scroll Lock.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  &lt;/div&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://forums.freebsd.org/threads/scrolling-back-without-scroll-lock-key.42703/&quot;&gt;Scrolling Back without Scroll-Lock Key? - FreeBSD Forums&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.phoronix.com/news/Linux-5.9-Drops-Soft-Scrollback&quot;&gt;Linux 5.9 Dropping Soft Scrollback Support From FB + VGA Console Code&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://unix.stackexchange.com/questions/714692/how-to-scroll-back-in-linux-virtual-consoles-2022&quot;&gt;tty - How to scroll back in Linux virtual consoles (2022)? [duplicate] - Unix &amp;amp; Linux Stack Exchange&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.phoronix.com/forums/forum/software/general-linux-open-source/1206921-linux-5-9-dropping-soft-scrollback-support-from-fb-vga-console-code#post1207225&quot;&gt;Linux 5.9 Dropping Soft Scrollback Support From FB + VGA Console Code - Discussion includes KMSCon&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lkml.iu.edu/hypermail/linux/kernel/2009.2/05870.html&quot;&gt;Linux Torvalds’ announcement about removing soft scrollback support from FB + VGA console code - Sep 20 2020&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://unix.stackexchange.com/questions/325542/linux-console-shift-pgup-not-working-anymore&quot;&gt;Linux console Shift + PgUp not working anymore - Unix and Linux Stack Exchange&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.linuxquestions.org/questions/showthread.php?p=6167719&quot;&gt;The Latest Kernel Release - Page 173 - Console scrollback removed - Sep 19 2020&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.ycombinator.com/item?id=34154035&quot;&gt;KMSCon still has scrollback support - Hacker News - Dec 27 2022&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.ycombinator.com/item?id=36334329&quot;&gt;Scrollback on Linux TTY - Hacker News - Jun 14 2023 - Discussion includes KMSCon&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.ycombinator.com/item?id=34153404&quot;&gt;KMSCon – A Userspace System Console That Does Not Depend on Any Graphics Server (freedesktop.org) - Discussion on Hacker News&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.freedesktop.org/wiki/Software/kmscon/&quot;&gt;kmscon - a system console for Linux - freedesktop.org&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://cgit.freedesktop.org/~dvdhrm/kmscon/plain/README&quot;&gt;Kmscon - a simple terminal emulator based on linux kernel mode setting (KMS)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

</description>
        <pubDate>Sun, 29 Mar 2026 23:39:59 +0000</pubDate>
        <link>https://duskopijetlovic.github.io/rs232serial/console/terminal/cli/keyboard/sysadmin/freebsd/unix/2026/03/29/vt-aka-virtual-console-scroll-in-freebsd-and-linux.html</link>
        <guid isPermaLink="true">https://duskopijetlovic.github.io/rs232serial/console/terminal/cli/keyboard/sysadmin/freebsd/unix/2026/03/29/vt-aka-virtual-console-scroll-in-freebsd-and-linux.html</guid>
        
        
        <category>rs232serial</category>
        
        <category>console</category>
        
        <category>terminal</category>
        
        <category>cli</category>
        
        <category>keyboard</category>
        
        <category>sysadmin</category>
        
        <category>freebsd</category>
        
        <category>unix</category>
        
      </item>
    
      <item>
        <title>X11 DPI Scaling Guide</title>
        <description>&lt;h1 id=&quot;x11-dpi-xft-x-server-dpi-and-scaling&quot;&gt;X11 DPI, Xft, X Server DPI, and Scaling&lt;/h1&gt;

&lt;p&gt;A consolidated, reference for DPI, Xft, X Server DPI, EDID, and scaling in X11 environments - especially for FreeBSD with FVWM3 window manager or any non-DE workflow.&lt;/p&gt;

&lt;p&gt;FreeBSD * X11 * FVWM3 * No DE&lt;/p&gt;

&lt;p&gt;My environment: FreeBSD 14.3, Shell: csh, WM (window manager): FVWM3, No DE (Desktop Environment), Lenovo ThinkPad T14s Gen 3 (14”, Intel) laptop.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Scenario: You have a 14-inch laptop, and its built-in screen is a WUXGA (Wide Ultra XGA) (resolution: 1920 x 1200) screen, so even though it’s not HiDPI (as HiDPI typically starts at displays with a pixel density greater than 200 pixels per inch (PPI)), it’s still a &lt;em&gt;Very High Pixel Density (140+ PPI)&lt;/em&gt; panel.
When you use it with an external monitor that supports PPI (DPI) of 90-110 DPI, it works fine.
However, when you use the laptop with only its built-in screen, everything appears smaller than it’s comfortable for you. (Sharp fonts but microscopic UI elements.)&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;tldr&quot;&gt;TL;DR&lt;/h1&gt;

&lt;h2 id=&quot;what-dpi-should-i-use-on-this-laptop&quot;&gt;What DPI should I use on this laptop?&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Set &lt;strong&gt;Xft.dpi: 120&lt;/strong&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.Xresources&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Explanation:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Physical DPI on this laptop = &lt;em&gt;162&lt;/em&gt;. –&amp;gt; See &lt;a href=&quot;#11a-compute-physical-dpi&quot;&gt;11a. Compute Physical DPI&lt;/a&gt;, and footnote [&lt;sup&gt;&lt;a href=&quot;#footnotes&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;].&lt;/li&gt;
  &lt;li&gt;DPI that I like on the extarnal monitor = 94.&lt;/li&gt;
  &lt;li&gt;Preferred &lt;em&gt;effective DPI&lt;/em&gt; ~94.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To approximate this scaling, I use DPI = &lt;strong&gt;120&lt;/strong&gt;, or DPI = &lt;strong&gt;144&lt;/strong&gt;, so set &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Xft.dpi&lt;/code&gt; to 120 or 144.&lt;/p&gt;

&lt;p&gt;Add either this line:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Xft.dpi: 120
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;or this line:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Xft.dpi: 144
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.Xresources&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Recommended DPI values for my laptop: &lt;strong&gt;120&lt;/strong&gt; = ~125% scaling (good for 90-110 DPI screens), or &lt;strong&gt;144&lt;/strong&gt; = ~150% scaling.&lt;/li&gt;
  &lt;li&gt;Physical DPI: use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xrandr | grep -w connected&lt;/code&gt; -&amp;gt; compute with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(pixels/mm) x 25.4&lt;/code&gt;.  See &lt;a href=&quot;#11a-compute-physical-dpi&quot;&gt;11a. Compute Physical DPI&lt;/a&gt;, and footnote [&lt;sup&gt;&lt;a href=&quot;#footnotes&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;]&lt;/li&gt;
  &lt;li&gt;Logical DPI (what apps use): check with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xrdb -query | grep Xft.dpi&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdpyinfo&lt;/code&gt; shows &lt;strong&gt;X server DPI&lt;/strong&gt; (rarely used by modern apps).&lt;/li&gt;
  &lt;li&gt;Modern apps (GTK, Qt, Firefox, Thunderbird) need their own scaling settings.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Xft.dpi&lt;/code&gt; can be changed &lt;strong&gt;live&lt;/strong&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xrdb -merge&lt;/code&gt;), while X server DPI &lt;strong&gt;cannot&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;Scaling on X11 is per-toolkit; no universal scaling unless inside a Desktop Environment.&lt;/li&gt;
  &lt;li&gt;For Firefox/Thunderbird, use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;layout.css.devPixelsPerPx = 1.0&lt;/code&gt; for 1x scaling.&lt;/li&gt;
  &lt;li&gt;For bitmap (XLFD) fonts, Xterm uses its own font sizes, independent of DPI.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;what-dpi-should-i-use-on-an-external-monitor&quot;&gt;What DPI should I use on an external monitor?&lt;/h2&gt;

&lt;p&gt;NOTE: Usually no scaling needed for external monitors.
The goal is to be standing or sitting and be able to comfortably read text at 100% scaling without eye strain.&lt;/p&gt;

&lt;p&gt;Choose one of monitors with the following specifications, listed here in order of preference:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;1920x1200 - WUXGA: 24-inch (PPI 94.34, pixel pitch 0.27 mm)&lt;/li&gt;
  &lt;li&gt;2560x1440 - QHD (Quad HD) or WQHD (Wide QHD) or 1440p: 27-inch (PPI 108.79, pixel pitch 0.23 mm&lt;/li&gt;
  &lt;li&gt;1920x1080 - FHD (Full HD): 24-inch (PPI 91.79, pixel pitch 0.28 mm)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;NOTE: Panel Type of the chosen monitor needs to be: IPS (In-Plane Switching).&lt;/p&gt;

&lt;p&gt;For other possible monitor choices see footnote [&lt;sup&gt;&lt;a href=&quot;#footnotes&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;].&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;1-check-or-compute-physical-dpi-from-edid&quot;&gt;1. Check or Compute Physical DPI (from EDID)&lt;/h1&gt;

&lt;p&gt;aka: &lt;strong&gt;Actual&lt;/strong&gt; pixel density of the monitor&lt;br /&gt;
aka: Commands you use for DPI diagnostics&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ xrandr --prop | grep -w connected   # gives pixels + mm size
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then, compute the physical DPI:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;(pixels / millimeters) x 25.4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;For an example of computing physical DPI, see &lt;a href=&quot;#11a-compute-physical-dpi&quot;&gt;11a. Compute Physical DPI&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;NOTE: EDID may sometimes report incorrect millimeter sizes.&lt;/p&gt;

&lt;h1 id=&quot;2-check-x-server-dpi-rarely-meaningful&quot;&gt;2. Check X Server DPI (rarely meaningful)&lt;/h1&gt;

&lt;p&gt;aka: What Xorg calculates &lt;em&gt;at startup&lt;/em&gt; from EDID or overrides (e.g., overrides by commands)&lt;/p&gt;

&lt;p&gt;aka: What Xorg &lt;em&gt;thinks&lt;/em&gt; your DPI is&lt;br /&gt;
aka: “&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdpyinfo&lt;/code&gt; dots-per-inch” (often physical DPI, not logical DPI)&lt;/p&gt;

&lt;p&gt;Shown in:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ xdpyinfo | grep dots
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;For an example of using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdpyinfo&lt;/code&gt; to get X Server DPI, see &lt;a href=&quot;#11b-x-server-dpi&quot;&gt;11b. X Server DPI&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Almost never affects anything modern.&lt;/li&gt;
  &lt;li&gt;Only very old X11 programs care.&lt;/li&gt;
  &lt;li&gt;Cannot be changed live.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;3-check-logical-dpi-read-x-resources&quot;&gt;3. Check Logical DPI (Read X Resources)&lt;/h1&gt;

&lt;p&gt;aka: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Xft.dpi&lt;/code&gt; &lt;br /&gt;
aka: What apps use &lt;br /&gt;
aka: User-controlled DPI (or Effective user scaling)&lt;/p&gt;

&lt;p&gt;Toolkit DPI, used by Fontconfig/Xft, GTK, Qt, and many modern apps.&lt;/p&gt;

&lt;p&gt;Shown in:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ xrdb -query | grep Xft.dpi
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Also:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ grep Xft.dpi ~/.Xresources
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Can be changed live via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xrdb -merge&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For an example using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xrdb -query&lt;/code&gt; or using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt; on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.Xresources&lt;/code&gt; to query the logical DPI, see &lt;a href=&quot;#11c-logical-dpi&quot;&gt;11c. Logical DPI&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;set-logical-dpi-recommended-workflow&quot;&gt;Set Logical DPI (Recommended Workflow)&lt;/h3&gt;

&lt;p&gt;Logical DPI = &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Xft.dpi&lt;/code&gt;, controls &lt;em&gt;font scaling&lt;/em&gt; for modern apps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where is the logical DPI set?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;See &lt;a href=&quot;#3a-to-set-logical-dpi-temporary---during-the-current-x-session&quot;&gt;3a&lt;/a&gt;, &lt;a href=&quot;#3b-to-set-logical-dpi-permanently&quot;&gt;3b&lt;/a&gt;, &lt;a href=&quot;#3c-to-set-x-server-dpi-requires-restart---rarely-meaningful&quot;&gt;3c&lt;/a&gt;.&lt;/p&gt;

&lt;h4 id=&quot;3a-to-set-logical-dpi-temporary---during-the-current-x-session&quot;&gt;3a. To set logical DPI temporary - during the current X session&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ printf &quot;%s\n&quot; &quot;Xft.dpi:  120&quot; | xrdb -merge
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;3b-to-set-logical-dpi-permanently&quot;&gt;3b. To set logical DPI permanently&lt;/h4&gt;

&lt;p&gt;Add the following line to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.Xresources&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Xft.dpi: 120
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;3c-to-set-x-server-dpi-requires-restart---rarely-meaningful&quot;&gt;3c. To set X server DPI (requires restart) - rarely meaningful&lt;/h4&gt;

&lt;p&gt;aka: Change logical DPI server-wide&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ startx -- -dpi 120 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;4-recommended-flexible-workflow&quot;&gt;4. Recommended Flexible Workflow&lt;/h1&gt;

&lt;p&gt;Keep &lt;strong&gt;Xft.dpi = 120 - 144&lt;/strong&gt;, and adjust individual toolkits/apps via environment variables instead of relying on a Desktop Environment (DE).
Works well in FVWM3 + FreeBSD.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why DPI&lt;/strong&gt; of &lt;strong&gt;120&lt;/strong&gt; to &lt;strong&gt;144&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;120 DPI = 96 x 1.25, and 144 DPI = 96 x 1.50, which are clean, well-tested 125% and 150% scaling steps.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ printf &quot;%s\n&quot; &quot;scale = 2; 94 * 1.5&quot; | bc
141.0

$ printf &quot;%s\n&quot; &quot;scale = 2; 96 * 1.25&quot; | bc
120.00

$ printf &quot;%s\n&quot; &quot;scale = 2; 96 * 1.5&quot; | bc
144.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In X11, DPI increments historically follow multiples of: 96 (baseline), 120 (scale: 1.25x), 144 (1.5x), 168 (1.75x), 192 (2x), …
These values have the best support across: Xft, Fontconfig, GTK2/GTK3, Qt, Web engines (Firefox/Chromium), …&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;STEP A - Compute physical DPI (optional but recommended)
    &lt;ul&gt;
      &lt;li&gt;Use (11a) Example.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;STEP B - Choose a starting logical DPI
    &lt;ul&gt;
      &lt;li&gt;Based on comfort + physical DPI.&lt;/li&gt;
      &lt;li&gt;Use this table:
        &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;| Physical DPI | Recommended Xft.dpi |
| ------------ | ------------------- |
| 70-90        | 96-110              |
| 90-110       | 96-132              |
| 110-140      | 120-144             |
| 140-200      | 120-168             |
| &amp;gt;200         | 150-200 (HiDPI zone)|
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;        &lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;For &lt;em&gt;my&lt;/em&gt; preference (96-120 comfortable PPI):
        &lt;ul&gt;
          &lt;li&gt;Start at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Xft.dpi&lt;/code&gt;: 120.&lt;/li&gt;
          &lt;li&gt;Try 132 or 144 if needed.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;STEP C - Set logical DPI
    &lt;ul&gt;
      &lt;li&gt;For the current X session:
        &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ printf &quot;%s\n&quot; &quot;Xft.dpi: 120&quot; | xrdb -merge
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;        &lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;To survive system restart:
        &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ printf &quot;%s\n&quot; &quot;Xft.dpi: 120&quot; &amp;gt;&amp;gt; ~/.Xresources
$ xrdb ~/.Xresources
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;        &lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;Restart apps.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;5-understanding-dpi-differences&quot;&gt;5. Understanding DPI Differences&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Toolkits&lt;/em&gt; use different DPI systems:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;| Concept      | Command                    | Meaning         | Matches       |
|              |                            |                 | Physical DPI? |
|--------------|----------------------------|-----------------|---------------|
| Physical DPI | xrandr                     | Actual          | Always        |
|              |   or                       | pixel           |               |
|              | xdpyinfo dimensions        | density         |               |
|--------------|----------------------------|-----------------|---------------|
| X Server DPI | xdpyinfo | grep dots       | What Xorg uses  | Sometimes     |
|              |                            | internally      |               |
|--------------|----------------------------|-----------------|---------------|
| Logical DPI  | xrdb -query | grep Xft.dpi | Font/UI scaling | Usually       |
|              |                            | for toolkits    | different     |
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;6-toolkit-and-application-notes-short&quot;&gt;6. Toolkit and Application Notes (Short)&lt;/h1&gt;

&lt;p&gt;aka: How toolkits and applications &lt;em&gt;interpret&lt;/em&gt; scaling&lt;/p&gt;

&lt;h3 id=&quot;xterm&quot;&gt;Xterm&lt;/h3&gt;

&lt;p&gt;I use &lt;em&gt;bitmap&lt;/em&gt; fonts (&lt;strong&gt;XLFD&lt;/strong&gt;) in Xterm.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Use XLFD names in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.Xresources&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Bitmap X core fonts (&lt;strong&gt;XLFD&lt;/strong&gt;) - unaffected by DPI changes.&lt;/li&gt;
  &lt;li&gt;Xterm with (Fontconfig/Freetype) fonts (OTF/TTF) -&amp;gt; obeys &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Xft.dpi&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;gtk&quot;&gt;GTK&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;GTK2 (font sizes)
Configured via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.gtkrc-2.0&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;GTK3 (scaling + font sizes)
Configured via: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.config/gtk-3.0/settings.ini&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;GDK Environment Variables
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;GDK_SCALE=1
GDK_DPI_SCALE=1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Firefox/Thunderbird
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;layout.css.devPixelsPerPx = 1.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;NOTE: It’s recommanded to install the package &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lxappearance&lt;/code&gt; to manage the GTK themes.&lt;/p&gt;

&lt;h3 id=&quot;qt5qt6-eg-keepassxc-retext-etc&quot;&gt;Qt5/Qt6 (e.g. KeePassXC, ReText, etc.)&lt;/h3&gt;
&lt;p&gt;Environment variables:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;QT_SCALE_FACTOR=1.0
QT_FONT_DPI=144
QT_AUTO_SCREEN_SCALE_FACTOR=0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;7-recommended-x11-workflow-nonde&quot;&gt;7. Recommended X11 Workflow (Non‑DE)&lt;/h1&gt;

&lt;h3 id=&quot;best-overall-workflow-for-fvwm3--freebsd&quot;&gt;Best overall workflow for FVWM3 + FreeBSD&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Set Xft DPI globally:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Xft.dpi: 120
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Leave X Server DPI (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;startx -- -dpi 120&lt;/code&gt;) untouched (do &lt;strong&gt;not&lt;/strong&gt; chase it).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Adjust individual toolkits:
    &lt;ul&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;QT_FONT_DPI=120&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GTK_THEME&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gsettings&lt;/code&gt;, or settings.ini for GTK&lt;/li&gt;
      &lt;li&gt;Firefox/Thunderbird: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;layout.css.devPixelsPerPx = 1.0&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Adjust &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm&lt;/code&gt; with XLFD font sizes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This avoids XSETTINGS daemons and keeps scaling predictable.&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;8-high-level-rules&quot;&gt;8. High-Level Rules&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;Rule 1: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Xft.dpi&lt;/code&gt; controls almost all modern GUI apps.&lt;/li&gt;
  &lt;li&gt;Rule 2: X server DPI (xdpyinfo dots) rarely matters today.&lt;/li&gt;
  &lt;li&gt;Rule 3: Bitmap fonts ignore scaling (hardcoded pixel sizes).&lt;/li&gt;
  &lt;li&gt;Rule 4: For laptop screens with physical DPI &amp;gt; ~132, typical comfort values:
    &lt;ul&gt;
      &lt;li&gt;120-144 DPI (~120%-150% scaling)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Rule 5: Set &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Xft.dpi&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.Xresources&lt;/code&gt; -&amp;gt; consistent behavior across apps.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;9-qa&quot;&gt;9. Q&amp;amp;A&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;What is EDID?&lt;/strong&gt;&lt;br /&gt;
EDID = Extended Display Identification Data.
EDID is metadata stored in the display panel firmware that tells the GPU and OS about the display’s characteristics. 
These characteristics include: physical dimensions (mm), display name/model, preferred resolution, supported modes.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;X uses EDID to determine physical size -&amp;gt; which determines physical DPI.&lt;/li&gt;
  &lt;li&gt;Xorg does &lt;em&gt;not&lt;/em&gt; measure your screen.
    &lt;ul&gt;
      &lt;li&gt;It only &lt;em&gt;reports&lt;/em&gt; what the EDID claims.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What sets physical DPI?&lt;/strong&gt;&lt;br /&gt;
EDID.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which DPI do apps use?&lt;/strong&gt;&lt;br /&gt;
Logical DPI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is X Server DPI the same as physical DPI?&lt;/strong&gt;&lt;br /&gt;
No.
They often match but are not guaranteed to.
Xorg &lt;em&gt;computes&lt;/em&gt; DPI at &lt;em&gt;startup&lt;/em&gt; using &lt;em&gt;EDID&lt;/em&gt; or &lt;em&gt;policy&lt;/em&gt;.
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdpyinfo -&amp;gt; dots per inch&lt;/code&gt; may differ from actual monitor DPI.&lt;br /&gt;
If EDID size is wrong or the system forces 96 DPI, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdpyinfo | grep dots&lt;/code&gt; will not reflect real DPI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is logical DPI the same as X Server DPI?&lt;/strong&gt;&lt;br /&gt;
No.
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Xft.dpi&lt;/code&gt; is a separate logical value used by &lt;strong&gt;toolkits&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can logical DPI be changed live?&lt;/strong&gt;&lt;br /&gt;
Yes, with: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xrdb -merge&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can X Server DPI be changed live?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;No.&lt;/li&gt;
  &lt;li&gt;Requires restarting X.
    &lt;ul&gt;
      &lt;li&gt;Shut down X: In my case, in the window manager (FVWM3), choose the “Exit” menu item.
(Alternatively, run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pkill Xorg&lt;/code&gt; from the terminal emulator.)&lt;/li&gt;
      &lt;li&gt;Then, initialize an X session with this command: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;startx -- -dpi 120&lt;/code&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Does xrandr show DPI?&lt;/strong&gt;&lt;br /&gt;
No. It shows millimeter size; DPI must be computed manually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why does Xorg snap DPI to 96/120/144/etc.?&lt;/strong&gt;&lt;br /&gt;
Legacy X11 relies on values divisible by 12 (1/12‑inch granularity).&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;10-terminology-ppi-vs-dpi-vs-pixel-pitch&quot;&gt;10. Terminology: PPI vs DPI vs Pixel Pitch&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;PPI (Pixels Per Inch): Number of pixels along one inch of screen - very relevant for monitors.&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;DPI (Dots Per Inch): Originally for printing - number of dots of ink per inch.
When used for screens it’s often used loosely like “screen DPI” but technically PPI is more appropriate.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Are PPI and DPI approximately the same?
Yes - when vendors say “DPI” for a monitor, they often mean “PPI”.
So for practical purposes you can treat a monitor with ~100 PPI as ~100 DPI.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Pixel Pitch: Distance between the centres of two adjacent pixels (usually in mm).
    &lt;ul&gt;
      &lt;li&gt;Relationship:  &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PPI ~= 25.4/pixel‐pitch (mm)&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;Example: Pixel pitch 0.27 mm =&amp;gt; PPI ~= 25.4/0.27 ~= 94.1&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;| Pixel Pitch | PPI (approx.) |
| ----------- | ------------- |
| 0.31 mm     | 82 PPI        |
| 0.29 mm     | 88 PPI        |
| 0.27 mm     | 94 PPI        |
| 0.25 mm     | 102 PPI       |
| 0.23 mm     | 110 PPI       |
| 0.20 mm     | 127 PPI       |
| 0.16 mm     | 159 PPI       |
| 0.12 mm     | 212 PPI       |
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So for my use (text, terminal use), aiming for PPI &lt;strong&gt;~90-110&lt;/strong&gt; is a good target.&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;11-examples&quot;&gt;11. Examples&lt;/h1&gt;

&lt;h3 id=&quot;11a-compute-physical-dpi&quot;&gt;11a. Compute Physical DPI&lt;/h3&gt;

&lt;p&gt;Physical DPI = &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(pixels / millimeters) x 25.4&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ xrandr | grep -w connected
eDP-1 connected primary 1920x1200+0+0 (normal left inverted right x axis y axis) 301mm x 188mm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ printf &quot;%s\n&quot; &quot;scale = 2; (1920 / 301) * 25.4&quot; | bc
161.79
 
$ printf &quot;%s\n&quot; &quot;scale = 2; (1200 / 188) * 25.4&quot; | bc
162.05
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Horizontal physical DPI ~162.
Vertial physical DPI ~162.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Physical DPI&lt;/strong&gt; = &lt;strong&gt;~162&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&quot;11b-x-server-dpi&quot;&gt;(11b) X Server DPI&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ xdpyinfo | grep dots
  resolution:    162x162 dots per inch
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;X Server DPI&lt;/strong&gt; = &lt;strong&gt;162&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&quot;11c-logical-dpi&quot;&gt;(11c) Logical DPI&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ xrdb -query | grep Xft.dpi
Xft.dpi:  120 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ grep Xft.dpi ~/.Xresources
Xft.dpi:  120 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;12-toolkit-analyzers---xdpi-and-qtdpi&quot;&gt;12. Toolkit Analyzers - xdpi and qtdpi&lt;/h1&gt;

&lt;p&gt;NOTE: For directions on how to build and install &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdpi&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;qtdpi&lt;/code&gt;, see my post &lt;a href=&quot;/x11/xorg/xterm/config/dotfiles/howto/font/freebsd/utf8/unicode/unix/cli/terminal/shell/tip/c/programming/tutorial/2025/11/09/freebsd-x11-xorg-compiling-xdpi-and-about-dpi.html&quot;&gt;Building and Using xdpi on FreeBSD - About DPI and HiDPI&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdpi&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;qtdpi&lt;/code&gt; confirm how toolkits actually perceive DPI.&lt;/p&gt;

&lt;p&gt;Useful because toolkits sometimes guess wrong physical DPI.&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;resources-and-references&quot;&gt;Resources and References&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/Oblomov/xdpi&quot;&gt;GitHub - Oblomov/xdpi: X11 DPI information retrieval&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://wok.oblomov.eu/tecnologia/mixed-dpi-x11/&quot;&gt;Mixed DPI and the X Window System&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.infobyip.com/detectmonitordpi.php&quot;&gt;Display DPI detector - find out DPI of your monitor&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;A square with 1 inch width and 1 inch height is shown below.&lt;/p&gt;

      &lt;p&gt;1” x 1”&lt;/p&gt;

      &lt;p&gt;DPI is based on CSS 1” size in pixels and might be inaccurate on some operating systems, notably mobile phones.
You can easily check if DPI is detected correctly by measuring the black square above with a ruler.
If it is different from 1” then DPI value should be adjusted accordingly.
To display a square of a different size please click on one of the buttons below.&lt;/p&gt;

      &lt;p&gt;1”  2”  4”  4cm  8cm&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.infobyip.com/detectscreenresolution.php&quot;&gt;Screen resolution detector - find out resolution of your monitor&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;For my 14-inch WUXGA screen:&lt;/p&gt;

      &lt;p&gt;Your screen resolution and color depth are:
1920 x 1200 x 24
(width x height x color depth)
Your display aspect ratio is: 8 / 5 = 1.6&lt;/p&gt;

      &lt;p&gt;Screen resolution is the number of pixels your monitor have in horizontal and vertical dimensions.
Another characteristic of the screen resolution is color depth which measures the number of bits representing color of each pixel.
Higher screen resolution is commonly associated with higher productivity as you can see more information at the same time and don’t have to switch between windows frequently.
As a result increasing your screen resolution is often a better investment than buying a faster processor or more memory.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://nickjanetakis.com/blog/how-to-pick-a-good-monitor-for-software-development&quot;&gt;How to Pick a Good Monitor for Software Development&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.sven.de/dpi/&quot;&gt;DPI Calculator / PPI Calculator&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://projectorsize.com/screen-dpi-calculator/&quot;&gt;Screen DPI Calculator&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://sagecalculator.com/monitor-dpi-calculator/&quot;&gt;Monitor DPI Calculator&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://tftcentral.co.uk/&quot;&gt;TFTCentral - Monitor reviews, articles, information and news&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jceb/srandrd&quot;&gt;srandrd - simple randr daemon&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;srandrd(1) is a tool that executes a command on xrandr output change events, i.e. if a monitor is plugged or unplugged.
By default srandrd forks to background and exits if the xserver exits.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://tonsky.me/blog/monitors/&quot;&gt;Time to upgrade your monitor&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://news.ycombinator.com/item?id=23551983&quot;&gt;Time to Upgrade Your Monitor - Hacker News&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;footnotes&quot;&gt;Footnotes&lt;/h2&gt;

&lt;p&gt;[1] Sometimes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdpyinfo&lt;/code&gt; doesn’t show dimensions for the &lt;strong&gt;current&lt;/strong&gt; monitor (screen or output).
For example, after I unplugged an external monitor from my laptop, without restarting X (X11, X Window System), &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdpyinfo&lt;/code&gt; was showing dimensions of &lt;strong&gt;only&lt;/strong&gt; the &lt;em&gt;external monitor&lt;/em&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ xdpyinfo | grep dimensions
  dimensions:    2560x1440 pixels (334x188 millimeters)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;However, the laptop’s screen (eDP-1) was actually 301x188 mm, 1920x1200 pixels:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ grep &quot;Display dimensions&quot; /var/log/Xorg.0.log
[686196.891] (**) modeset(0): Display dimensions: (301, 188) mm

$ grep &quot;using initial mode&quot; /var/log/Xorg.0.log
[686196.891] (II) modeset(0): Output eDP-1 using initial mode 1920x1200 +0+0
[686196.891] (II) modeset(0): Output DP-1 using initial mode 2560x1440 +1920+0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ xrandr --verbose | grep -w connected
eDP-1 connected primary 1920x1200+0+0 (0x49) normal (normal left inverted right x axis y axis) 301mm x 188mm
 
$ xrandr --verbose | grep -w disconnected | grep &apos;0mm x 0mm&apos;
DP-1 disconnected 2560x1440+0+0 (0x96) normal (normal left inverted right x axis y axis) 0mm x 0mm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Similarly, the X Server log file, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/var/log/Xorg.0.log&lt;/code&gt;, sometimes doesn’t show correct DPI for the current monitor.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ grep DPI /var/log/Xorg.0.log
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;While this command should show the DPI value Xorg is using, it might not always reflect the physical DPI of your monitor, especially if Xorg is unable to correctly determine the display’s physical dimensions or if a default DPI (like 96 DPI) is being applied.
For a more accurate physical DPI calculation, you need to manually compute it from its actual physical dimensions and resolution (pixels).&lt;/p&gt;

&lt;p&gt;As above with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdpyinfo&lt;/code&gt;, after I unplugged an external monitor from my laptop, without restarting X (X11, X Window System), the Xorg log file was not showing correct physical DPI:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ grep DPI /var/log/Xorg.0.log
[686196.891] (**) modeset(0): DPI set to (378, 194)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;[2] Possible monitors for use with laptop.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;| Resolution                 | Diagonal Size | PPI    | Dot Pitch     |
| (Horizontal x Vertical )   | (inches)      |        | (Pixel Pitch) |
| (pixels)                   |               |        | (mm)          |

| 1920x1080 (FHD or Full HD) | 27            | 81.59  | 0.31          |
|                            | 25            | 88.12  | 0.29          |
|                            | 24            | 91.79  | 0.28          |
|                            | 22            | 100.13 | 0.25          |
|                            | 21            | 104.90 | 0.24          |
|                            | 19            | 115.94 | 0.22          |

| 1920x1200 (WUXGA or 1200p) | 27            | 83.86  | 0.30          |
|                            | 25            | 90.57  | 0.28          | 
|                            | 24            | 94.34  | 0.27          |
|                            | 22            | 102.92 | 0.25          |
|                            | 20            | 113.21 | 0.22          |
|                            | 16            | 114.51 | 0.18          |

| 2560x1440 (WQHD, 1440p)    | 32            | 91.79  | 0.28          |
|                            | 27            | 108.79 | 0.23          |
|                            | 24            | 122.38 | 0.21          |
|                            | 25            | 117.49 | 0.22          |
|                            | 22            | 133.51 | 0.19          |
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

</description>
        <pubDate>Sun, 23 Nov 2025 17:16:11 +0000</pubDate>
        <link>https://duskopijetlovic.github.io/x11/xorg/xterm/config/dotfiles/howto/font/freebsd/utf8/unicode/unix/cli/terminal/shell/tip/c/programming/tutorial/2025/11/23/x11-dpi-scaling-guide.html</link>
        <guid isPermaLink="true">https://duskopijetlovic.github.io/x11/xorg/xterm/config/dotfiles/howto/font/freebsd/utf8/unicode/unix/cli/terminal/shell/tip/c/programming/tutorial/2025/11/23/x11-dpi-scaling-guide.html</guid>
        
        
        <category>x11</category>
        
        <category>xorg</category>
        
        <category>xterm</category>
        
        <category>config</category>
        
        <category>dotfiles</category>
        
        <category>howto</category>
        
        <category>font</category>
        
        <category>freebsd</category>
        
        <category>utf8</category>
        
        <category>unicode</category>
        
        <category>unix</category>
        
        <category>cli</category>
        
        <category>terminal</category>
        
        <category>shell</category>
        
        <category>tip</category>
        
        <category>c</category>
        
        <category>programming</category>
        
        <category>tutorial</category>
        
      </item>
    
      <item>
        <title>X11 DPI Reference</title>
        <description>&lt;h1 id=&quot;x11-dpi--font-scaling-essential-reference&quot;&gt;X11 DPI &amp;amp; Font Scaling: Essential Reference&lt;/h1&gt;

&lt;p&gt;My environment:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;FreeBSD 14.3&lt;/li&gt;
  &lt;li&gt;Shell: csh&lt;/li&gt;
  &lt;li&gt;WM (window manager): FVWM3&lt;/li&gt;
  &lt;li&gt;No DE (Desktop Environment)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;tldr&quot;&gt;TL;DR&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;For my 14-inch laptop, set &lt;strong&gt;Xft.dpi: 120&lt;/strong&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.Xresources&lt;/code&gt; to match the external monitor scaling.&lt;/li&gt;
  &lt;li&gt;Physical DPI (from EDID): use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdpyinfo | grep dimensions&lt;/code&gt; -&amp;gt; compute with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(pixels/mm) × 25.4&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Logical DPI (what apps use): check with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xrdb -query | grep Xft.dpi&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdpyinfo&lt;/code&gt; shows &lt;strong&gt;X server DPI&lt;/strong&gt; (rarely used by modern apps).&lt;/li&gt;
  &lt;li&gt;Modern apps (GTK, Qt, Firefox, Thunderbird) need their own scaling settings.&lt;/li&gt;
  &lt;li&gt;Xft.dpi can be changed &lt;strong&gt;live&lt;/strong&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xrdb -merge&lt;/code&gt;). X server DPI &lt;strong&gt;cannot&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;Scaling on X11 is per-toolkit; no universal scaling unless inside a Desktop Environment.&lt;/li&gt;
  &lt;li&gt;For Firefox/Thunderbird, use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;layout.css.devPixelsPerPx = 1.0&lt;/code&gt; for 1× scaling.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm&lt;/code&gt; for &lt;em&gt;bitmap&lt;/em&gt; fonts (&lt;strong&gt;XLFD&lt;/strong&gt;) uses its own font sizes, independent of DPI.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1-core-terms&quot;&gt;1. Core Terms&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Physical dimensions&lt;/strong&gt; - The size of the display in millimeters, usually read from EDID.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Physical DPI&lt;/strong&gt; - Pixels per inch computed from physical size; often inaccurate on laptops.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Logical DPI&lt;/strong&gt; - The DPI value X uses for UI and font scaling; controlled by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Xft.dpi&lt;/code&gt; or XSETTINGS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Global Xft.dpi&lt;/strong&gt; - A logical DPI value that affects all applications using Xft/Fontconfig (not XLFD).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;X Server DPI (xdpyinfo DPI)&lt;/strong&gt; - The DPI value determined by the X server at startup, based on EDID or defaulting to 96.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EDID&lt;/strong&gt; - A small data block from the display that reports resolution, size, and capabilities.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;2-what-each-command-shows&quot;&gt;2. What Each Command Shows&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdpyinfo&lt;/code&gt;&lt;/strong&gt; - Shows what the &lt;em&gt;X server&lt;/em&gt; believes: physical size, resolution, and the X server’s DPI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xrandr&lt;/code&gt;&lt;/strong&gt; - Shows physical size and resolution per output, as reported via EDID.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xrdb -query&lt;/code&gt;&lt;/strong&gt; - Shows the current logical DPI (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Xft.dpi&lt;/code&gt;) used by Xft/Fontconfig-based apps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/var/log/Xorg.0.log&lt;/code&gt;&lt;/strong&gt; - Shows EDID-reported millimeter size and the DPI computed by Xorg at startup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdpi&lt;/code&gt; (external tool)&lt;/strong&gt; - Shows physical DPI per display using EDID values.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;3-commands&quot;&gt;3. Commands&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Show X server DPI&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;xdpyinfo | grep -i dots
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Show Xft.dpi (logical DPI for modern font rendering)&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;xrdb -query | grep -i dpi
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Show physical dimensions and resolution&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;xdpyinfo | grep dimensions
xrandr | grep -w connected
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Show EDID-derived dimensions from Xorg&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;grep -i &quot;dimension&quot; /var/log/Xorg.0.log
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;4-dpi-formulas&quot;&gt;4. DPI Formulas&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Physical DPI:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;(pixels / millimeters) × 25.4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Logical DPI&lt;/strong&gt; - no formula; it’s whatever you set in:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.Xresources&lt;/code&gt; (Xft.dpi)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xrdb -merge&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;A desktop environment’s XSETTINGS daemon&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;5-examples&quot;&gt;5. Examples&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Example laptop:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Resolution: 1920 × 1200
Size:       301 × 188 mm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Physical DPI:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;(1200 / 188) × 25.4 = 162.05
(1920 / 301) × 25.4 = 161.79
≈ 162 DPI
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Xft.dpi&lt;/code&gt; is set to 120 (in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.Xresources&lt;/code&gt;):&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;xrdb -query | grep Xft.dpi -&amp;gt; 120 
xdpyinfo -&amp;gt; still shows 162 (X server DPI)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This is normal because X server DPI does &lt;strong&gt;not&lt;/strong&gt; change &lt;strong&gt;automatically&lt;/strong&gt; when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Xft.dpi&lt;/code&gt; changes.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;6-changing-dpi&quot;&gt;6. Changing DPI&lt;/h2&gt;

&lt;h3 id=&quot;change-logical-dpi-affects-fontsui-in-modern-apps&quot;&gt;Change logical DPI (affects fonts/UI in modern apps)&lt;/h3&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;printf &quot;Xft.dpi: 120&quot; | xrdb -merge
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Effective immediately for most apps (you’ll probably need to restart them).&lt;/p&gt;

&lt;h3 id=&quot;change-x-server-dpi-rare-requires-restart&quot;&gt;Change X server DPI (rare, requires restart)&lt;/h3&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;startx -- -dpi 120 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Or add to Xorg config.&lt;/p&gt;

&lt;p&gt;Changing X server DPI &lt;em&gt;live&lt;/em&gt; is generally &lt;strong&gt;not&lt;/strong&gt; supported.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;7-qa&quot;&gt;7. Q&amp;amp;A&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: How do I check &lt;em&gt;physical&lt;/em&gt; DPI?&lt;/strong&gt;&lt;br /&gt;
A: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdpyinfo | grep dimensions&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xrandr&lt;/code&gt;, then compute using the formula.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How do I check &lt;em&gt;logical&lt;/em&gt; DPI?&lt;/strong&gt;&lt;br /&gt;
A: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xrdb -query | grep Xft.dpi&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Why do xdpyinfo DPI and Xft.dpi differ?&lt;/strong&gt;&lt;br /&gt;
A: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdpyinfo&lt;/code&gt; shows &lt;strong&gt;X server DPI&lt;/strong&gt;; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Xft.dpi&lt;/code&gt; is a &lt;strong&gt;separate logical DPI&lt;/strong&gt; for modern font systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Is Xft.dpi global?&lt;/strong&gt;&lt;br /&gt;
A: Yes - global for all Xft/Fontconfig-based applications; does not affect legacy XLFD apps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can I change Xft.dpi live?&lt;/strong&gt;&lt;br /&gt;
A: Yes, using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xrdb -merge&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can I change the X server DPI live?&lt;/strong&gt;&lt;br /&gt;
A: No, it requires restarting X.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How can I verify whether EDID-reported millimeters are correct?&lt;/strong&gt;&lt;br /&gt;
A: Compare &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xrandr&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdpyinfo&lt;/code&gt; millimeter values with the actual physical measurement of the screen.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;8-additional-answers-for-freebsd--fvwm3-environment&quot;&gt;8. Additional Answers for FreeBSD + FVWM3 Environment&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What DPI should I set on my laptop?&lt;/strong&gt;&lt;br /&gt;
To match a 94-DPI external monitor, set &lt;strong&gt;Xft.dpi: 120&lt;/strong&gt; so all Fontconfig/Xft applications scale similarly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can this be set globally?&lt;/strong&gt;&lt;br /&gt;
Yes: put &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Xft.dpi: 120&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.Xresources&lt;/code&gt; and load with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xrdb -merge&lt;/code&gt;.
Some toolkits (GTK, Qt, Firefox, Thunderbird) still need separate per-toolkit scaling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is today’s scaling situation per-application?&lt;/strong&gt;&lt;br /&gt;
Yes. There is no universal scaling across X11; each toolkit may require overrides.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Font scaling vs. full scaling&lt;/strong&gt;&lt;br /&gt;
Font scaling affects &lt;em&gt;text size only&lt;/em&gt;.
Full scaling enlarges &lt;em&gt;entire UI elements&lt;/em&gt; (buttons, icons, padding, windows), typically via toolkit DPI multipliers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need fractional scaling?&lt;/strong&gt;&lt;br /&gt;
No. Since you want ~120 DPI, set &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Xft.dpi: 120&lt;/code&gt; and adjust toolkit settings; fractional scaling is mostly needed for DEs (Desktop Environments)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do apps render at their own resolution?&lt;/strong&gt;&lt;br /&gt;
Yes. Applications draw at native resolution unless toolkit scaling is applied.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is scaling difficult?&lt;/strong&gt;&lt;br /&gt;
Because each toolkit (GTK, Qt, Xlib, Xft) uses its own environment variables and X settings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which tools give DPI?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Physical DPI: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdpyinfo&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xrandr&lt;/code&gt;, Xorg logs, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdpi&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Logical DPI: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xrdb -query&lt;/code&gt; (Xft.dpi).&lt;/li&gt;
  &lt;li&gt;Real DPI: same as &lt;em&gt;physical DPI&lt;/em&gt;.&lt;br /&gt;
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xrandr&lt;/code&gt; shows physical size but does &lt;em&gt;not&lt;/em&gt; compute DPI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;DPI vs PPI?&lt;/strong&gt;&lt;br /&gt;
DPI originated from printing; PPI is correct for screens.
In practice, DPI ~= PPI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can Xft.dpi be changed live?&lt;/strong&gt;&lt;br /&gt;
Yes: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;printf &quot;Xft.dpi: 120&quot; | xrdb -merge&lt;/code&gt;.&lt;br /&gt;
Toolkit-specific DPI (Qt, GTK) can also be changed live via environment variables.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdpi&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;qtdpi&lt;/code&gt; report?&lt;/strong&gt;&lt;br /&gt;
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdpi&lt;/code&gt; reports EDID-based physical DPI.
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;qtdpi&lt;/code&gt; reports logical DPI per screen (Qt’s internal interpretation).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Toolkits you need to configure:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;GTK2: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.gtkrc-2.0&lt;/code&gt; (font sizes).&lt;/li&gt;
  &lt;li&gt;GTK3: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.config/gtk-3.0/settings.ini&lt;/code&gt; (scaling + font sizes).&lt;/li&gt;
  &lt;li&gt;Qt5/Qt6: env vars (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;QT_SCALE_FACTOR&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;QT_FONT_DPI&lt;/code&gt;, etc.).&lt;/li&gt;
  &lt;li&gt;Firefox/Thunderbird: set &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;layout.css.devPixelsPerPx = 1.0&lt;/code&gt; for 1× scaling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;xterm scaling (for bitmap fonts)&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;Bitmap fonts&lt;/em&gt;: use &lt;strong&gt;XLFD names&lt;/strong&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.Xresources&lt;/code&gt;.&lt;/p&gt;

</description>
        <pubDate>Sat, 22 Nov 2025 22:22:17 +0000</pubDate>
        <link>https://duskopijetlovic.github.io/x11/xorg/xterm/config/dotfiles/howto/font/freebsd/utf8/unicode/unix/cli/terminal/shell/tip/c/programming/tutorial/2025/11/22/x-11-dpi-reference.html</link>
        <guid isPermaLink="true">https://duskopijetlovic.github.io/x11/xorg/xterm/config/dotfiles/howto/font/freebsd/utf8/unicode/unix/cli/terminal/shell/tip/c/programming/tutorial/2025/11/22/x-11-dpi-reference.html</guid>
        
        
        <category>x11</category>
        
        <category>xorg</category>
        
        <category>xterm</category>
        
        <category>config</category>
        
        <category>dotfiles</category>
        
        <category>howto</category>
        
        <category>font</category>
        
        <category>freebsd</category>
        
        <category>utf8</category>
        
        <category>unicode</category>
        
        <category>unix</category>
        
        <category>cli</category>
        
        <category>terminal</category>
        
        <category>shell</category>
        
        <category>tip</category>
        
        <category>c</category>
        
        <category>programming</category>
        
        <category>tutorial</category>
        
      </item>
    
      <item>
        <title>Compiling and Building X11 Program on FreeBSD</title>
        <description>&lt;p&gt;Alternate title: “Building and Using xdpi and qtdpi on FreeBSD - DPI and Pixel Density”&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;xdpi - Display DPI and Physical Dimensions from X11/XCB&lt;/p&gt;

&lt;p&gt;xdpi queries Xlib, XRandR, Xinerama, and XCB to reveal the actual pixel density and physical dimensions reported by your X server.
It’s a tiny diagnostic tool that helps you understand why your display looks the way it does.&lt;/p&gt;

&lt;p&gt;From the project’s Github &lt;a href=&quot;https://github.com/Oblomov/xdpi&quot;&gt;Oblomov - xdpi: X11 DPI information retrieval&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;xdpi - This is a small &lt;em&gt;C program&lt;/em&gt; that retrieves &lt;em&gt;all information about DPI (dots per inch)&lt;/em&gt; of the &lt;em&gt;available displays in X11&lt;/em&gt;.&lt;/p&gt;

  &lt;p&gt;[ . . . ]&lt;/p&gt;

  &lt;p&gt;qtdpi - A simple program to illustrate how Qt 5.6 and higher handle DPI information depending on the application settings&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;p&gt;My environment: FreeBSD 14.3, Shell: csh, WM (window manager): FVWM3, No DE (Des
ktop Environment), Lenovo ThinkPad T14s Gen 3 (14”, Intel) laptop - 14-inch WUXGA (Wide Ultra XGA), 1920 by 1200 pixels - So, not strictly High DPI (HighDPI or HiDPI) display but still a Very High Pixel Density (140+ PPI) panel.&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;xlib-aka-libx11---x-window-system-protocol-client-library&quot;&gt;Xlib (aka libX11) - X Window System Protocol Client Library&lt;/h1&gt;

&lt;p&gt;Xlib (also known as libX11) is an X Window System protocol client library written in the C programming language.
It contains functions for interacting with an X server.
These functions allow programmers to write programs without knowing the details of the X protocol.&lt;/p&gt;

&lt;p&gt;Applications usually don’t use Xlib directly; rather, they employ other libraries that use Xlib functions to provide widget toolkits (to generate GUI applications): Xt (X Toolkit Intrinsics), Xaw (Athena widget set), Motif, FLTK, GTK, Qt (X11 version), Tk (an extension for the Tcl scripting language), SDL (Simple DirectMedia Layer), SFML (Simple and Fast Multimedia Library), which in turn use Xlib for interacting with the server [X server].&lt;/p&gt;

&lt;h1 id=&quot;how-to-build-xdpi&quot;&gt;How to Build xdpi&lt;/h1&gt;

&lt;h3 id=&quot;step-1---get-the-source-code&quot;&gt;Step 1 - Get the source code&lt;/h3&gt;

&lt;p&gt;Clone the repository:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ git clone https://github.com/Oblomov/xdpi/ 
$ cd xdpi
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;step-2---check-prerequisites&quot;&gt;Step 2 - Check prerequisites&lt;/h3&gt;

&lt;p&gt;FreeBSD installs X11 components under &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/usr/local&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Check that the required X11 development libraries are installed:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ pkg info | egrep &apos;libX11 | libXrandr | libXinerama | libxcb | xcb-util | xcb-util-xrm | xorgproto&apos;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If any are missing, install them:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ sudo pkg install libX11 libXrandr libXinerama libxcb xcb-util xcb-util-xrm xorgproto
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;step-3---build-preferred-and-alternatives&quot;&gt;Step 3 - Build (preferred and alternatives)&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Preferred (recommended) - &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pkg-config&lt;/code&gt; (simple, portable, correct).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This asks &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pkg-config(8)&lt;/code&gt; for the right include &amp;amp; link flags for your system:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ cc -std=c99 xdpi.c `pkg-config --cflags --libs x11 xrandr xinerama xcb xcb-randr xcb-xinerama xcb-xrm` -lm -o xdpi
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pkg-config&lt;/code&gt; returns the correct &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-I&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-L -l&lt;/code&gt; pieces (on FreeBSD those will point to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/usr/local/include&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/usr/local/lib&lt;/code&gt;).&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Backup manual method (if &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pkg-config&lt;/code&gt; is unavailable)&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ cc -std=c99 -I/usr/local/include -L/usr/local/lib -D_THREAD_SAFE xdpi.c -lX11 -lXrandr -lXinerama -lxcb -lxcb-randr -lxcb-xinerama -lxcb-xrm -lm -o xdpi
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;NOTE:  How the manual compile line was derived? - aka - Why these flags?&lt;/p&gt;

&lt;p&gt;These flags come directly from the libraries the program includes.&lt;/p&gt;

&lt;p&gt;Looking at the source code (xdpi.c), you see includes like:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ grep include xdpi.c
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdint.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;string.h&amp;gt;
#include &amp;lt;math.h&amp;gt;
#include &amp;lt;X11/Xlib.h&amp;gt;
#include &amp;lt;X11/extensions/Xinerama.h&amp;gt;
#include &amp;lt;X11/extensions/Xrandr.h&amp;gt;
#include &amp;lt;xcb/xproto.h&amp;gt;
#include &amp;lt;xcb/xinerama.h&amp;gt;
#include &amp;lt;xcb/randr.h&amp;gt;
#include &amp;lt;xcb/xcb_xrm.h&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Rule of thumb - when analyzing a C/C++ source file and classifying headers (header names) as likely standard or non-standard based on the presence of a directory prefix:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;No directory, simple name -&amp;gt; probably standard C.&lt;/li&gt;
  &lt;li&gt;Directory-prefixed name (X11/, xcb/, GL/) -&amp;gt; external library.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For external libraries, each header implies one library must be linked [2]:&lt;/p&gt;

&lt;p&gt;NOTES:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Header–library is not alwasy one-to-one: Including a header does not guarantee you need to link a library - some headers are purely inline macros or depend on other headers, but for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X11/XCB&lt;/code&gt; extensions, you generally do need the corresponding library.&lt;/li&gt;
  &lt;li&gt;Library dependencies cascade: For example, linking &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-lXrandr&lt;/code&gt; may implicitly require &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-lX11&lt;/code&gt; because &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libXrandr&lt;/code&gt; depends on it.
Similarly, linking &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;XCB&lt;/code&gt; extensions often requires &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-lxcb&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;For portability, using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pkg-config&lt;/code&gt; is preferred. For example:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ cc myprog.c `pkg-config --cflags --libs x11 xrandr xinerama xcb xcb-randr xcb-xinerama xcb-xrm` -o myprog
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Here’s a table that provides the safest approach to explicitly list headers&amp;lt;-&amp;gt;libraries&amp;lt;-&amp;gt;FreeBSD package names, so that the user can manually supply &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-I&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-L&lt;/code&gt; options and link &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-l&lt;/code&gt; libraries:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;+----------------------------+-----------------+-----------------------+
| Header                     | Library         | FreeBSD Package       |
|----------------------------|-----------------|-----------------------|
| stdio.h, stdlib.h,         | -lm             | base system           |
| string.h, stdint.h, math.h |                 |                       |
| X11/Xlib.h                 | -lX11           | x11/libX11            |
| X11/extensions/Xinerama.h  | -lXinerama      | x11/libXinerama       |
| X11/extensions/Xrandr.h    | -lXrandr        | x11/libXrandr         |
| xcb/xcb.h / xcb/xproto.h   | -lxcb           | x11/libxcb            |
| xcb/randr.h                | -lxcb-randr     | x11/xcb-util-randr    |
| xcb/xinerama.h             | -lxcb-xinerama  | x11/xcb-util-xinerama |
| xcb/xrm.h                  | -lxcb-xrm       | x11/xcb-util-xrm      |
+----------------------------+-----------------+-----------------------+

Notes:
- Linking order matters: XCB extensions follow core X11/XCB.
- Include paths: -I/usr/local/include or -I/usr/local/include/X11
- Library paths: -L/usr/local/lib
- For math functions, always add -lm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;FreeBSD stores X11 development headers in:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/usr/local/include
/usr/local/lib
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So you add the following flags for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cc(1)&lt;/code&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clang(1)&lt;/code&gt;) [3]:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;-I/usr/local/include
-L/usr/local/lib
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In summary, the logic behind the flags - aka Why these flags?&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;-I/usr/local/include -L/usr/local/lib: FreeBSD installs X headers/libs under /usr/local (not /usr).
-lX11 -lXrandr -lXinerama: link the Xlib and extensions used by the program.
-lxcb -lxcb-randr -lxcb-xinerama -lxcb-xrm: link the optional xcb support libraries.
-lm: math library (used by the program).
-std=c99: program is written for C99.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;NOTE: Why wasn’t &amp;lt;xcb/xproto.h&amp;gt; checked in the pkg or header checks?&lt;/p&gt;

&lt;p&gt;Because:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xcb/xproto.h&lt;/code&gt; comes from the core libxcb package, not from one of the extension-specific packages.&lt;/p&gt;

&lt;p&gt;On FreeBSD, installing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libxcb&lt;/code&gt; always provides it.
The file lives at:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/usr/local/include/xcb/xproto.h
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;When you checked for:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;libxcb xcb-util xcb-util-xrm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;you implicitly covered the presence of the libxcb development headers, so the assumption was:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;if libxcb is installed, xproto.h is guaranteed.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The check list was aimed at extension libraries that might or might not be installed (randr, xinerama, xcb-xrm).&lt;/p&gt;

&lt;p&gt;Core XCB is “always included” and therefore not usually listed.&lt;/p&gt;

&lt;p&gt;If you want a robust checklist, you can explicitly check for it.
It doesn’t harm, and it makes the steps feel complete.&lt;/p&gt;

&lt;p&gt;Something like:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ pkg info | grep ^libxcb
libxcb-1.17.0                  The X protocol C-language Binding (XCB) library
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;or explicit headers:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ test -f /usr/local/include/xcb/xproto.h &amp;amp;&amp;amp; echo &quot;xproto.h OK&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Why &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pkg-config&lt;/code&gt; didn’t require anything special for it?&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pkg-config --cflags --libs xcb&lt;/code&gt; automatically pulls in the correct include path for the core XCB headers.
It doesn’t list the header names; it only provides the flags needed to find them.&lt;/p&gt;

&lt;p&gt;So &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xccb/xproto.h&lt;/code&gt; was silently handled by the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xcb&lt;/code&gt; package’s metadata.&lt;/p&gt;

&lt;p&gt;In short:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;xcb/xproto.h&amp;gt;&lt;/code&gt; is installed by the base &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libxcb&lt;/code&gt; package.&lt;/li&gt;
  &lt;li&gt;That package was already included in your checks (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libxcb&lt;/code&gt;).&lt;/li&gt;
  &lt;li&gt;That’s why it didn’t get its own dedicated check line.&lt;/li&gt;
  &lt;li&gt;If you prefer explicit completeness, add a quick header test or a pkg info libxcb.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Alternatively, a quick header check:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ ls /usr/local/include/X11/Xlib.h \
   /usr/local/include/X11/extensions/Xrandr.h \
   /usr/local/include/X11/extensions/Xinerama.h \
   /usr/local/include/xcb/randr.h \
   /usr/local/include/xcb/xinerama.h \
   /usr/local/include/xcb/xcb_xrm.h || echo &quot;some headers missing&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Makefile method (for automation or packaging)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The supplied Makefile is convenient.
On FreeBSD it may override your environment CPPFLAGS.&lt;/p&gt;

&lt;p&gt;It works after adding these two lines for appending pkg-config-derived flags to the Makefile:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;CPPFLAGS += $(shell pkg-config --cflags x11 xrandr xinerama xcb xcb-randr xcb-xinerama xcb-xrm)

LDLIBS += $(shell pkg-config --libs x11 xrandr xinerama xcb xcb-randr xcb-xinerama xcb-xrm)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then simply run:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ make
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;step-4---install&quot;&gt;Step 4 - Install&lt;/h3&gt;

&lt;p&gt;For personal use:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ install -m 755 xdpi ~/bin/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;For system-wide use (as root):&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ install -m 755 xdpi /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;step-5---run&quot;&gt;Step 5 - Run&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ xdpi
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This reports DPI for each connected monitor and suggests per-monitor scaling ratios.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the output means&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdpi&lt;/code&gt; reports the physical size, pixel resolution, and computed DPI for each connected display, using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Xlib&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;XRandR&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Xinerama&lt;/code&gt;.
It helps determine correct DPI values and optional scaling ratios when working with mixed-DPI monitors.&lt;/p&gt;

&lt;p&gt;Example useful lines:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;eDP-1: ... 162x162 dpi - laptop screen DPI
HDMI-1: ... 94x94 dpi  - external monitor DPI
Xft.dpi: 94            - global Xft DPI visible to many GUI toolkits
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;step-6-short-summary&quot;&gt;Step 6. Short summary&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Preferred modern method: use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pkg-config&lt;/code&gt; (cc … &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pkg-config --cflags --libs ...&lt;/code&gt;) - simple, portable, correct.&lt;/li&gt;
  &lt;li&gt;Backup manual method: add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-I/usr/local/include -L/usr/local/lib&lt;/code&gt; and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-l&lt;/code&gt; flags manually.&lt;/li&gt;
  &lt;li&gt;Makefile method: fine for automation; on FreeBSD you may need to append &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pkg-config&lt;/code&gt; flags or override CPPFLAGS/LDFLAGS as shown above.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;how-to-build-qtdpi&quot;&gt;How to Build qtdpi&lt;/h1&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ command -V qmake; type qmake; which qmake; whereis -a qmake; where -a qmake
qmake: not found
qmake: not found
qmake: Command not found.
qmake: /usr/ports/devel/qmake
 
$ command -V qmake-qt5; type qmake-qt5; which qmake-qt5; whereis -a qmake-qt5; where -a qmake-qt5
qmake-qt5 is /usr/local/bin/qmake-qt5
qmake-qt5 is /usr/local/bin/qmake-qt5
/usr/local/bin/qmake-qt5
qmake-qt5: /usr/local/bin/qmake-qt5 /usr/ports/devel/qt5-qmake/work/stage/usr/local/bin/qmake-qt5
/usr/local/bin/qmake-qt5
 
$ command -V qmake6; type qmake6; which qmake6; whereis -a qmake6; where -a qmake6 
qmake6 is /usr/local/bin/qmake6
qmake6 is /usr/local/bin/qmake6
/usr/local/bin/qmake6
qmake6: /usr/local/bin/qmake6
/usr/local/bin/qmake6
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ cd xdpi/qt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ ls -Alh
total 10
-rw-r--r--  1 dusko wheel   35B Nov  4 16:55 .gitignore
-rw-r--r--  1 dusko wheel  1.4K Nov  4 16:55 main.cpp
-rw-r--r--  1 dusko wheel  258B Nov  4 16:55 qtdpi.pro
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ qmake-qt5
Info: creating stash file /tmp/xdpi/qt/.qmake.stash
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ ls -Alhrt
total 23
-rw-r--r--  1 dusko wheel   35B Nov  4 16:55 .gitignore
-rw-r--r--  1 dusko wheel  1.4K Nov  4 16:55 main.cpp
-rw-r--r--  1 dusko wheel  258B Nov  4 16:55 qtdpi.pro
-rw-r--r--  1 dusko wheel  669B Nov 11 16:11 .qmake.stash
-rw-r--r--  1 dusko wheel   26K Nov 11 16:11 Makefile
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ make
clang++ -c -pipe -Wextra -g -std=c++11 -Wall -Wextra -pthread -fPIC -DQT_GUI_LIB -DQT_CORE_LIB -I. -I/usr/local/include/qt5 -I/usr/local/include/qt5/QtGui -I/usr/local/include/qt5/QtCore -I. -I/usr/local/include -I/usr/local/include -I/usr/local/lib/qt5/mkspecs/freebsd-clang -o main.o main.cpp
clang++ -pthread -Wl,-rpath,/usr/local/lib/qt5 -o qtdpi main.o   -L/usr/local/lib /usr/local/lib/qt5/libQt5Gui.so /usr/local/lib/qt5/libQt5Core.so -lGL
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ ls -Alhrt
total 708
-rw-r--r--  1 dusko wheel   35B Nov  4 16:55 .gitignore
-rw-r--r--  1 dusko wheel  1.4K Nov  4 16:55 main.cpp
-rw-r--r--  1 dusko wheel  258B Nov  4 16:55 qtdpi.pro
-rw-r--r--  1 dusko wheel  669B Nov 11 16:11 .qmake.stash
-rw-r--r--  1 dusko wheel   26K Nov 11 16:11 Makefile
-rw-r--r--  1 dusko wheel  1.0M Nov 11 16:12 main.o
-rwxr-xr-x  1 dusko wheel  606K Nov 11 16:12 qtdpi
 
$ file qtdpi
qtdpi: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, for FreeBSD 14.3, FreeBSD-style, with debug_info, not stripped
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;With a single monitor (laptop only):&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ ./qtdpi
QT version: 0x50f11
Enable/Disable: 0/0
Global pixel ratio: 1
Screens: 1
        eDP-1 @ (0,0) size (1920, 1200):
                Physical DPI: 162.074
                 Logical DPI: 144
                 pixel ratio: 1
Enable/Disable: 0/1
Global pixel ratio: 1
Screens: 1
        eDP-1 @ (0,0) size (1920, 1200):
                Physical DPI: 162.074
                 Logical DPI: 144
                 pixel ratio: 1
Enable/Disable: 1/0
Global pixel ratio: 2
Screens: 1
        eDP-1 @ (0,0) size (960, 600):
                Physical DPI: 81.0369
                 Logical DPI: 96
                 pixel ratio: 2
Enable/Disable: 1/1
Global pixel ratio: 1
Screens: 1
        eDP-1 @ (0,0) size (1920, 1200):
                Physical DPI: 162.074
                 Logical DPI: 144
                 pixel ratio: 1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;resources&quot;&gt;Resources&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Oblomov/xdpi&quot;&gt;GitHub - Oblomov/xdpi: X11 DPI information retrieval&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;&lt;strong&gt;X11 DPI information retrieval&lt;/strong&gt;&lt;/p&gt;

      &lt;p&gt;This is a small C program that retrieves all information about DPI (dots per inch) of the available displays in X11.
Information from both the core protocol and the XRANDR extension is presented. Xinerama information (which lacks physical dimensions, and is thus not directly useful to determine output DPI) is also presented.
If an XSETTINGS daemon is found, the reported (scaled and raw) Xft/DPI value is presented.&lt;/p&gt;

      &lt;p&gt;(Limitation: XSETTINGS is currently only shown for Xlib, not xcb.)&lt;/p&gt;

      &lt;p&gt;From the retrieved information, xdpi will also compute (and present) “proposed” per-monitor/per-output UI scaling factors, assuming a reference &lt;strong&gt;96 DPI&lt;/strong&gt;.
Each scaling factor is computed as a single-precision floating-point integer, and four values are shown:&lt;/p&gt;

      &lt;ul&gt;
        &lt;li&gt;the floor (largest integer no larger than),&lt;/li&gt;
        &lt;li&gt;the value itself,&lt;/li&gt;
        &lt;li&gt;the rounded value (closest integer),&lt;/li&gt;
        &lt;li&gt;and the ceiling (smallest integer no smaller than).&lt;/li&gt;
      &lt;/ul&gt;

      &lt;p&gt;For each monitor/output, both the native scaling factors (based on the reported DPI) and the prorated factors (which take into account the ratio of the core DPI to the primary output DPI) are shown.&lt;/p&gt;

      &lt;p&gt;Finally, to improve the usefulness of xdpi as a debugging tool, we also show the content of the following known-relevant environment variables, if set:&lt;/p&gt;
      &lt;ul&gt;
        &lt;li&gt;CLUTTER_SCALE&lt;/li&gt;
        &lt;li&gt;GDK_SCALE&lt;/li&gt;
        &lt;li&gt;GDK_DPI_SCALE&lt;/li&gt;
        &lt;li&gt;QT_AUTO_SCREEN_SCALE_FACTOR&lt;/li&gt;
        &lt;li&gt;QT_SCALE_FACTOR&lt;/li&gt;
        &lt;li&gt;QT_SCREEN_SCALE_FACTORS&lt;/li&gt;
        &lt;li&gt;QT_DEVICE_PIXEL_RATIO&lt;/li&gt;
      &lt;/ul&gt;

      &lt;p&gt;&lt;strong&gt;Qt&lt;/strong&gt;&lt;/p&gt;

      &lt;p&gt;A simple program to illustrate how Qt 5.6 and higher handle DPI information depending on the application settings &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Qt::AA_EnableHighDpiScaling&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Qt::AA_DisableHighDpiScaling&lt;/code&gt; can be found in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;qt&lt;/code&gt; directory.&lt;/p&gt;

      &lt;p&gt;Build it with&lt;/p&gt;

      &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;qmake &amp;amp;&amp;amp; make
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;      &lt;/div&gt;

      &lt;p&gt;and then run it with&lt;/p&gt;

      &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;./qtdpi
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;      &lt;/div&gt;

      &lt;p&gt;If your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;qmake&lt;/code&gt; by defaults builds against Qt4, run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;qtmake -qt=5&lt;/code&gt; before &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;make&lt;/code&gt;.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://wok.oblomov.eu/tecnologia/mixed-dp
i-x11/&quot;&gt;Mixed DPI and the X Window System&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;I’m writing this article because I’m getting tired of repeating the same conce
pts every time someone makes misinformed statements about the (lack of) support
for mixed-DPI configurations in X11.
It is my hope that anybody looking for information on the subject may be direc
ted here, to get the facts about the actual possibilities offered by the protoco
l, avoiding the biased misinformation available from other sources.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;(Simple:) &lt;a href=&quot;https://dougie.io/linux/hidpi-retina-i3wm/&quot;&gt;A Flawless i3wm experience on a HiDPI/Retina display&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;(Very useful:) &lt;a href=&quot;https://unix.stackexchange.com/questions/596887/how-to-scale-the-resolution-display-of-the-desktop-and-or-applications&quot;&gt;x11 - How to scale the resolution/display of the desktop and/or applications? - Unix &amp;amp; Linux Stack Exchange&lt;/a&gt; &amp;lt;– For Qt and GDK/Gnome environment variables&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lobste.rs/s/z98fqy/linux_high_dpi_settings&quot;&gt;Linux High DPI Settings - Lobsters&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://horstmann.com/unblog/2023-01-07/index.html&quot;&gt;Linux High DPI Settings&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://unix.stackexchange.com/questions/227876/how-to-set-custom-resolution-using-xrandr-when-the-resolution-is-not-available-i&quot;&gt;How to set custom resolution using xrandr when the resolution is not available in ‘Display Settings’&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.summercat.com/configuring-mixed-dpi-monitors-with-xrandr.html&quot;&gt;Configuring mixed DPI monitors with xrandr&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;I use xrandr to configure a dual monitor setup with a high DPI and low DPI monitor on Linux.
I also use it to switch back and forth between a dual monitor and a single monitor setup.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gist.github.com/rinaldo-rex/d3db55230959b11ad67dcf06eac74c0c&quot;&gt;Handling different DPI settings for different monitors - GitHub gist - xrandr-config.md&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;// Taken from: https://blog.summercat.com/configuring-mixed-dpi-monitors-with-xrandr.html&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.makeuseof.com/tag/linux-hidpi-support-for-gnome-kde-xfce-cinnamon-and-firefox/&quot;&gt;Improving Linux HiDPI Support For Gnome, KDE, Xfce, Cinnamon And Firefox&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20140908015116/https://vincent.jousse.org/tech/archlinux-retina-hidpi-macbookpro-xmonad/&quot;&gt;Using Archlinux on a Retina (HiDPI) MacBook Pro with Xmonad&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://doc.qt.io/archives/qt-5.15/highdpi.html&quot;&gt;High DPI Displays - Qt 5.15&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;&lt;strong&gt;High DPI Displays&lt;/strong&gt;&lt;/p&gt;

      &lt;p&gt;High DPI displays have increased pixel density, compared to standard DPI displays.&lt;/p&gt;

      &lt;p&gt;Pixel density is measured in Dots per Inch (DPI) or Pixels per Inch (PPI), and is determined by the number of display pixels and their size.
Consequently, the number of pixels alone isn’t enough to determine if a display falls into the high-DPI category.&lt;/p&gt;

      &lt;p&gt;A 4K monitor has a fixed number of pixels (~8M), however its DPI varies between 185 (23 inches) and 110 (40 inches).
The former is around twice the standard 96 DPI desktop resolution; the latter barely exceeds this resolution.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lwn.net/Articles/619784/&quot;&gt;High-DPI displays and Linux [LWN.net]&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.infobyip.com
/detectmonitordpi.php&quot;&gt;Display DPI detector - find out DPI of your monitor&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://linuxreviews.org/HOWTO_set_DPI_in_Xorg&quot;&gt;HOWTO set DPI in Xorg&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://unix.stackexchange.com/questions/596894/how-does-linuxs-display-work&quot;&gt;xorg - How does Linux’s display work? - Unix &amp;amp; Linux Stack Exchange&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://unix.stackexchange.com/questions/596765/is-x-dpi-dot-per-inch-setting-just-meant-for-text-scaling&quot;&gt;x11 - Is X DPI (dot per inch) setting just meant for text scaling? - Unix &amp;amp; Linux Stack Exchange&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lists.freedesktop.org/archives/xorg/2018-July/059376.html&quot;&gt;xrandr with XPS 13” (3840x2160) HiDPI and 30” (2560x1600) LowDPI&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://old.reddit.com/r/archlinux/comments/mu6t1d/new_laptop_with_2560x1660_resolution_but_programs/&quot;&gt;new laptop with 2560x1660 resolution but programs are too small on arch. Adjusting the DPI isn’t really changing applications like chrome/firefox, is there an equivalent to the windows scale?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://superuser.com/questions/522453/xrandr-dpi-on-multihead-linux&quot;&gt;multiple monitors - XRandR DPI on multihead linux - Super User&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://askubuntu.com/questions/197828/how-to-find-and-change-the-screen-dpi&quot;&gt;How to find and change the screen DPI?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://wiki.archlinux.org/title/HiDPI&quot;&gt;HiDPI - ArchWiki - wiki.archlinux.org&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://bbs.archlinux.org/viewtopic.php?id=279099&quot;&gt;[Solved][xfce] What should be proper way to set correct DPI for laptop&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://wiki.archlinux.org/title/Xsettingsd&quot;&gt;Xsettingsd - ArchWiki - wiki.archlinux.org&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;footnotes&quot;&gt;Footnotes&lt;/h2&gt;

&lt;p&gt;[1] EDID (Extended Display Identification Data) is a small block of metadata stored inside your display (monitor, laptop panel, projector, etc.).
It’s provided by the display hardware to the graphics card so that the operating system (Xorg, Wayland, Windows, macOS, etc.) knows:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The display’s native resolution&lt;/li&gt;
  &lt;li&gt;The physical size (millimeters)&lt;/li&gt;
  &lt;li&gt;Supported refresh rates&lt;/li&gt;
  &lt;li&gt;Colour characteristics&lt;/li&gt;
  &lt;li&gt;Vendor/model information&lt;/li&gt;
  &lt;li&gt;Preferred timing modes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Xorg reads this data from the GPU/driver.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Details&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;EDID is stored in the screen hardware.&lt;/li&gt;
  &lt;li&gt;For laptop panels, it is inside the LCD panel’s firmware (EEPROM).&lt;/li&gt;
  &lt;li&gt;Xorg does not measure the screen.
Instead, it only reports what the EDID claims.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;[2] The other includes:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdint.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;string.h&amp;gt;
#include &amp;lt;math.h&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;are all part of the &lt;strong&gt;C standard library&lt;/strong&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libc&lt;/code&gt; on FreeBSD, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glibc&lt;/code&gt; on Linux, etc.) and the &lt;strong&gt;standard C headers&lt;/strong&gt;.
On FreeBSD (or any modern Unix-like OSs):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;They come with the &lt;strong&gt;compiler and system C library&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;You do &lt;strong&gt;not&lt;/strong&gt; need to install anything extra from ports/packages to use them.&lt;/li&gt;
  &lt;li&gt;They are automatically available when you invoke &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cc&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clang&lt;/code&gt; (or any standard-compliant compiler).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In contrast:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;X11/Xlib.h&amp;gt;
#include &amp;lt;X11/extensions/Xinerama.h&amp;gt;
#include &amp;lt;X11/extensions/Xrandr.h&amp;gt;
#include &amp;lt;xcb/xproto.h&amp;gt;
#include &amp;lt;xcb/xinerama.h&amp;gt;
#include &amp;lt;xcb/randr.h&amp;gt;
#include &amp;lt;xcb/xcb_xrm.h&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;These do &lt;strong&gt;not&lt;/strong&gt; come with the standard compiler.&lt;/li&gt;
  &lt;li&gt;They are part of the &lt;strong&gt;X11 and XCB development libraries&lt;/strong&gt;, which must be installed separately via ports/packages (like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libX11&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libXrandr*, &lt;/code&gt;libxcb`, etc.).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the rule of thumb is:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Standard C headers&lt;/strong&gt; -&amp;gt; always included, no extra installation.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;X11/other GUI or third-party libraries&lt;/strong&gt; -&amp;gt; may require installation of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-devel&lt;/code&gt; or equivalent packages.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is why the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pkg info | egrep ...&lt;/code&gt; check only looks for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libX11&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libXrandr&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libxcb&lt;/code&gt;, etc., and not the standard C headers.&lt;/p&gt;

&lt;p&gt;[3] Why &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/usr/bin/cc&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/usr/bin/clang&lt;/code&gt; look identical?&lt;/p&gt;

&lt;p&gt;FreeBSD uses &lt;strong&gt;Clang&lt;/strong&gt; as its system compiler - not GCC - and has done so for years.&lt;/p&gt;

&lt;p&gt;To ensure build scripts work across Unix systems, FreeBSD provides:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/usr/bin/cc&lt;/code&gt; (the traditional POSIX C compiler name)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/usr/bin/clang&lt;/code&gt; (the actual compiler)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On FreeBSD, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cc&lt;/code&gt; is just &lt;strong&gt;Clang&lt;/strong&gt; with a &lt;em&gt;different name&lt;/em&gt;.
It is &lt;em&gt;not&lt;/em&gt; a symlink.  It is a &lt;em&gt;hardlink&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That’s why the following listing shows:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ ls -lh /usr/bin/cc
-r-xr-xr-x  6 root wheel  105M Jul 13 12:50 /usr/bin/cc

$ ls -lh /usr/bin/clang
-r-xr-xr-x  6 root wheel  105M Jul 13 12:50 /usr/bin/clang
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And the size and timestamp match exactly.
The “6” before root is the &lt;strong&gt;link count&lt;/strong&gt;: meaning that &lt;em&gt;six&lt;/em&gt; filenames point to the same underlying file.&lt;/p&gt;

&lt;p&gt;So&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ diff /usr/bin/cc /usr/bin/clang
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;shows nothing because they are literally the same executable.&lt;/p&gt;

&lt;p&gt;In addition to the identical size and link count as clues for showing that they are &lt;em&gt;hardlinks&lt;/em&gt;, here’s the canonical way for confirming it:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ ls -li /usr/bin/cc /usr/bin/clang
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You’ll see the same inode number.&lt;/p&gt;

&lt;p&gt;Same inode -&amp;gt; same file.&lt;/p&gt;

&lt;p&gt;Let’s check:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ ls -li /usr/bin/cc /usr/bin/clang
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Output:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;165166 -r-xr-xr-x  6 root wheel 110230808 Jul 13 12:50 /usr/bin/cc
165166 -r-xr-xr-x  6 root wheel 110230808 Jul 13 12:50 /usr/bin/clang
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ command -V cc; type cc; which cc; whereis -a cc; where -a cc
cc is /usr/bin/cc
cc is /usr/bin/cc
/usr/bin/cc
cc: /usr/bin/cc /usr/share/man/man1/cc.1.gz /usr/share/man/man4/cc.4.gz /usr/ports/devel/py-pyperscan/files/cc /usr/ports/lang/quilc/files/cc /usr/src/contrib/netbsd-tests/usr.bin/cc
/usr/bin/cc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ command -V clang; type clang; which clang; whereis -a clang; where -a clang
clang is /usr/bin/clang
clang is /usr/bin/clang
/usr/bin/clang
clang: /usr/bin/clang /usr/share/man/man1/clang.1.gz /usr/src/usr.bin/clang /usr/ports/devel/llvm11/files/clang /usr/ports/emulators/wine-proton/files/clang /usr/src/contrib/llvm-project/clang /usr/src/contrib/llvm-project/clang/include/clang /usr/src/usr.bin/clang/clang
/usr/bin/clang
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Why FreeBSD does this?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Portability.&lt;/p&gt;

&lt;p&gt;Many build systems (e.g., ancient autoconf scripts) expect:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;cc = system C compiler&lt;/li&gt;
  &lt;li&gt;gcc = GNU compiler, if available&lt;/li&gt;
  &lt;li&gt;clang = Clang, if available&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;FreeBSD ensures that:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cc  -&amp;gt; clang
c++ -&amp;gt; clang++
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This keeps the system consistent and avoids breaking thousands of build scripts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So which one should you use?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For compiling &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdpi&lt;/code&gt; or any &lt;strong&gt;C program&lt;/strong&gt; on FreeBSD:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;is the canonical choice.&lt;/p&gt;

&lt;p&gt;It points to Clang anyway, and that’s what FreeBSD expects.&lt;/p&gt;

&lt;p&gt;You can use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clang&lt;/code&gt; explicitly if you want to, but it makes no difference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why does FreeBSD use hardlinks instead of symlinks?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Hardlinks survive chroot environments more predictably.&lt;/li&gt;
  &lt;li&gt;Some early-boot tools need a real binary, not a symlink.&lt;/li&gt;
  &lt;li&gt;It makes the compiler available even in minimal environments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s a robust-choice tradition in BSD land.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cc&lt;/code&gt; is Clang.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clang&lt;/code&gt; is Clang.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They are two faces of the same compiler.&lt;/p&gt;

&lt;p&gt;You can use either, and FreeBSD will happily treat them as the same being wearing different hats.&lt;/p&gt;

&lt;p&gt;FreeBSD avoids shipping GCC for base, but still provides it in ports.&lt;/p&gt;

&lt;hr /&gt;
</description>
        <pubDate>Sun, 09 Nov 2025 19:52:34 +0000</pubDate>
        <link>https://duskopijetlovic.github.io/x11/xorg/xterm/config/dotfiles/howto/font/freebsd/utf8/unicode/unix/cli/terminal/shell/tip/c/programming/tutorial/2025/11/09/freebsd-x11-xorg-compiling-xdpi-and-about-dpi.html</link>
        <guid isPermaLink="true">https://duskopijetlovic.github.io/x11/xorg/xterm/config/dotfiles/howto/font/freebsd/utf8/unicode/unix/cli/terminal/shell/tip/c/programming/tutorial/2025/11/09/freebsd-x11-xorg-compiling-xdpi-and-about-dpi.html</guid>
        
        
        <category>x11</category>
        
        <category>xorg</category>
        
        <category>xterm</category>
        
        <category>config</category>
        
        <category>dotfiles</category>
        
        <category>howto</category>
        
        <category>font</category>
        
        <category>freebsd</category>
        
        <category>utf8</category>
        
        <category>unicode</category>
        
        <category>unix</category>
        
        <category>cli</category>
        
        <category>terminal</category>
        
        <category>shell</category>
        
        <category>tip</category>
        
        <category>c</category>
        
        <category>programming</category>
        
        <category>tutorial</category>
        
      </item>
    
      <item>
        <title>HOWTO Change Themes and Colours in GTK Applications</title>
        <description>&lt;p&gt;AKA: HOWTO Change Themes and Colours in Zim Desktop Wiki&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;OS: FreeBSD 14&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% freebsd-version 
14.3-RELEASE-p1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Shell:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% ps $$
  PID TT  STAT    TIME COMMAND
43316  8  Ss   0:00.13 -csh (csh)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;X11 Window Manager:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% cat ~/.xinitrc
---- snip ----
exec fvwm3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% env GTK_DEBUG=interactive zim
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In the  debugger, click  ‘Visual’  tab.&lt;/p&gt;

&lt;p&gt;For ‘GTK+ Theme’ drop-down menu, change it from  ‘decay’ to some other theme, e.g. Yaru-viridian.&lt;/p&gt;

&lt;p&gt;GTK themes are in:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/usr/local/share/themes/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% cat /usr/local/share/themes/Yaru-viridian/index.theme
[Desktop Entry]
Name=Yaru-viridian
Type=X-GNOME-Metatheme
Comment=Ubuntu Yaru-viridian theme
Encoding=UTF-8

[X-GNOME-Metatheme]
GtkTheme=Yaru-viridian
MetacityTheme=Yaru
IconTheme=Yaru-viridian
CursorTheme=Yaru
CursorSize=24
X-Yaru-Dark=false
X-Yaru-Accent-Name=viridian
X-Yaru-Accent-Color=#03875B
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% cat /usr/local/share/themes/Yaru-viridian/gtk-3.0/gtk.css
@import url(&quot;resource:///com/ubuntu/themes/Yaru-viridian/3.0/gtk.css&quot;);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% ls -Alh ~/.config/gtk-3.0/
total 9
-rw-r--r--  1 dusko wheel  226B Oct  7 21:02 gtk.css
-rw-r--r--  1 dusko wheel  467B Mar  5  2025 settings.ini
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% grep theme ~/.config/gtk-3.0/settings.ini
gtk-cursor-theme-name=XCursor-Pro-Decay
gtk-cursor-theme-size=0
gtk-icon-theme-name=Papirus-Dark
gtk-theme-name=decay
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% grep gtk-theme-name ~/.config/gtk-3.0/settings.ini
gtk-theme-name=decay
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This worked (you can ignore warnings):&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% env GTK_THEME=Yaru-viridian zim
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;references&quot;&gt;References&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/zim-desktop-wiki/zim-desktop-wiki/issues/1284&quot;&gt;how to change theme in 0.73.2 #1284&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/zim-desktop-wiki/zim-desktop-wiki/issues/755&quot;&gt;Option to Change background and font color #755&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/zim-desktop-wiki/zim-desktop-wiki/discussions/1802&quot;&gt;Option to Change background and font color #1802&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

</description>
        <pubDate>Tue, 07 Oct 2025 17:28:08 +0000</pubDate>
        <link>https://duskopijetlovic.github.io/dotfiles/wiki/x11/xorg/howto/cli/terminal/shell/2025/10/07/zim-desktop-wiki-change-colors-themes-howto.html</link>
        <guid isPermaLink="true">https://duskopijetlovic.github.io/dotfiles/wiki/x11/xorg/howto/cli/terminal/shell/2025/10/07/zim-desktop-wiki-change-colors-themes-howto.html</guid>
        
        
        <category>dotfiles</category>
        
        <category>wiki</category>
        
        <category>x11</category>
        
        <category>xorg</category>
        
        <category>howto</category>
        
        <category>cli</category>
        
        <category>terminal</category>
        
        <category>shell</category>
        
      </item>
    
      <item>
        <title>ASCII/Unicode Control Characters (^L in Terminal)</title>
        <description>&lt;p&gt;AKA: NPC (Non-Printable Characters or Non-Printing Characters)&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Word cloud: ASCII Unicode UTF-8 CLI terminal xterm shell console RS232serial 
            “control characters” “ASCII control codes” “C0 control characters” 
            NPC “non-printable characters” “non-printing characters”
            locale teletype Unix “caret notation” “Control Pictures” 
            FF “Form Feed” “Page break” delimiter marker typography font history
            “insert ASCII control characters in text” “character escape sequences”
            “C-style escaped characters” “C escapes” dump “ASCII dump”
            less(1) xxd(1) hexdump(1) od(1) remind(1)&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;TLDR: The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;remind(1)&lt;/code&gt; program outputs the Form Feed (FF, ASCII &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0x0C&lt;/code&gt;, represented as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;^L&lt;/code&gt;) control character in its calendar displays.
Purpose of the FF character in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;remind(1)&lt;/code&gt; output is to facilitate pagination in terminal environments.
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;^L&lt;/code&gt; only becomes visible when the program in the pipeline decides to render it (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;less&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cat -v&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;od&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hexdump&lt;/code&gt;).&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Tested on FreeBSD 14.3-RELEASE-p1 in xterm (version/patch number 400) with csh shell.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% freebsd-version 
14.3-RELEASE-p1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% ps $$
  PID TT  STAT    TIME COMMAND
70183  5  Ss   0:00.32 -csh (csh)

% printf %s\\n &quot;$SHELL&quot;
/bin/csh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -version
XTerm(400)

% printf %s\\n &quot;$XTERM_VERSION&quot;
XTerm(400)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% locale
LANG=en_CA.UTF-8
LC_CTYPE=&quot;en_CA.UTF-8&quot;
LC_COLLATE=&quot;en_CA.UTF-8&quot;
LC_TIME=&quot;en_CA.UTF-8&quot;
LC_NUMERIC=&quot;en_CA.UTF-8&quot;
LC_MONETARY=&quot;en_CA.UTF-8&quot;
LC_MESSAGES=&quot;en_CA.UTF-8&quot;
LC_ALL=
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;what-is-l-in-output-on-terminal&quot;&gt;What is ^L in Output on Terminal?&lt;/h1&gt;

&lt;p&gt;For example, when I used &lt;a href=&quot;https://dianne.skoll.ca/projects/remind/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;remind(1)&lt;/code&gt;&lt;/a&gt; with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;less(1)&lt;/code&gt;, the ouptut had two &lt;strong&gt;^L&lt;/strong&gt; characters; one in the line separating months, and the other at the end of output, after the last line of the last month displayed.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% remind -c2 /path/to/.reminders  | less
+----------------------------------------------------------------------------+
|                               September 2025                               |
+----------+----------+----------+----------+----------+----------+----------+
|  Sunday  |  Monday  | Tuesday  |Wednesday | Thursday |  Friday  | Saturday |
+----------+----------+----------+----------+----------+----------+----------+
---- snip ----
+----------+----------+----------+----------+----------+----------+----------+
|28        |29        |30        |          |          |          |          |
|          |          |          |          |          |          |          |
|          |          |          |          |          |          |          |
|          |          |          |          |          |          |          |
|          |          |          |          |          |          |          |
+----------+----------+----------+----------+----------+----------+----------+
^L+----------------------------------------------------------------------------+
|                                October 2025                                |
+----------+----------+----------+----------+----------+----------+----------+
|  Sunday  |  Monday  | Tuesday  |Wednesday | Thursday |  Friday  | Saturday |
+----------+----------+----------+----------+----------+----------+----------+
|          |          |          |1         |2         |3         |4         |
|          |          |          |          |          |          |          |
---- snip ---
+----------+----------+----------+----------+----------+----------+----------+
|26        |27        |28        |29        |30        |31        |          |
|          |          |          |          |          |          |          |
|          |          |          |          |          |          |          |
|          |          |          |          |          |          |          |
|          |          |          |          |          |          |          |
+----------+----------+----------+----------+----------+----------+----------+
^L
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% remind -c2 /path/to/.reminders  | less --use-color
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% remind -c2 /path/to/.reminders | less | tail -1 | xxd
00000000: 0c                                       .
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Switch &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xxd(1)&lt;/code&gt; to bits (binary digits) dump, rather than hex dump:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% remind -c2 /path/to/.reminders | less | tail -1 | xxd -b
00000000: 00001100                                               .
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;As per footnote [&lt;sup&gt;&lt;a href=&quot;#footnotes&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;], the first bit of &lt;strong&gt;00001100&lt;/strong&gt; is &lt;strong&gt;0&lt;/strong&gt; (zero), so this is a &lt;strong&gt;1-byte&lt;/strong&gt; character.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% remind -c2 /path/to/.reminders | less | tail -1 | xxd -s0 -l1
00000000: 0c                                       .
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Since it’s a 1-byte character, there’s nothing in the next position.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% remind -c2 /path/to/.reminders | less | tail -1 | xxd -s1 -l1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Alternatively, you can use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-g bytes | -groupsize bytes&lt;/code&gt; [&lt;sup&gt;&lt;a href=&quot;#footnotes&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;] option of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xxd(1)&lt;/code&gt; tool, and separate the outupt in groups of 1-byte:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% remind -c2 /path/to/.reminders | less | tail -1 | xxd -g1
00000000: 0c 

% remind -c2 /path/to//.reminders | less | tail -1 | xxd -g1 -b
00000000: 00001100                                               .
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Back to the first position (first byte):&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% remind -c2 /path/to/.reminders | less | tail -1 | xxd -s0 -l1 -b
00000000: 00001100                                               .
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Continuing with the explanation:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;00001100&lt;/code&gt; starts with a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0&lt;/code&gt;, so it’s a single-byte ASCII character.&lt;/p&gt;

&lt;p&gt;What do the remaining bits &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;00001100&lt;/code&gt; represent?&lt;/p&gt;

&lt;p&gt;The bits from that byte (excluding the leading bits) combine to form the binary sequence &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1100&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;From the man page for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ascii(7)&lt;/code&gt;, for &lt;strong&gt;1100&lt;/strong&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;     The binary set:

      00     01     10     11

     NUL     SP      @      `     00000
     ---- snip ----
      FF      ,      L      l     01100
     ---- snip ----
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So, it’s the line with:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;      FF      ,      L      l     01100
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Again, from the man page for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ascii(7)&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    The full names of the control character set:

     NUL      NULl
     ---- snip ----
      FF      new page Form Feed
     ---- snip ----
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;It’s the &lt;em&gt;Form Feed&lt;/em&gt; character, abbreviated &lt;em&gt;FF&lt;/em&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Binary &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1100&lt;/code&gt; is &lt;em&gt;12&lt;/em&gt; in decimal. [&lt;sup&gt;&lt;a href=&quot;#footnotes&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;]&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% printf &quot;obase=10; ibase=2; 1100&quot; | bc
12
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;From the man page for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ascii(7)&lt;/code&gt;, for &lt;em&gt;12&lt;/em&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;     The decimal set:

       0 NUL    1 SOH    2 STX    3 ETX    4 EOT    5 ENQ    6 ACK    7 BEL
       8 BS     9 HT    10 LF    11 VT    12 FF    13 CR    14 SO    15 SI
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;12&lt;/code&gt; is &lt;strong&gt;FF&lt;/strong&gt; (Form Feed).&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;By default, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xxd(1)&lt;/code&gt; creates a hexadecimal dump (a hex dump):&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% remind -c2 /path/to/.reminders | less | tail -1 | xxd -s0 -l1 
00000000: 0c  
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;From the man page for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ascii(7)&lt;/code&gt;, for C (0c);&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;     The hexadecimal set:

     00 NUL   01 SOH   02 STX   03 ETX   04 EOT   05 ENQ   06 ACK   07 BEL
     08 BS    09 HT    0a LF    0b VT    0c FF    0d CR    0e SO    0f SI
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0c&lt;/code&gt; is &lt;strong&gt;FF&lt;/strong&gt; (Form Feed).&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% remind -c2 /path/to/.reminders | less | tail -1 | cat -v
^L%
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;From the man page for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cat(1)&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;     -v      Display non-printing characters so they are visible.
             Control characters print as `^X&apos; for control-X; the delete
             character (octal 0177) prints as `^?&apos;. 
             Non-ASCII characters (with the high bit set) are printed as
             `M-&apos; (for meta) followed by the character for the low 7 bits.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;QUESTION:&lt;/strong&gt; Why &lt;strong&gt;L&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;ANSWER: From the man page for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ascii(7)&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;     The binary set:
               
      00     01     10     11
               
     NUL     SP      @      `     00000
     ---- snip ----
      FF      ,      L      l     01100
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Also, from &lt;a href=&quot;https://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt&quot;&gt;Unicode lookup table source: &lt;em&gt;UnicodeData.txt&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;0000;&amp;lt;control&amp;gt;;Cc;0;BN;;;;;N;NULL;;;;
---- snip ----
000C;&amp;lt;control&amp;gt;;Cc;0;WS;;;;;N;FORM FEED (FF);;;;
---- snip ----
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cc&lt;/code&gt;: control character&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WS&lt;/code&gt;: white space&lt;/p&gt;

&lt;p&gt;From &lt;a href=&quot;https://en.wikipedia.org/wiki/Control_character&quot;&gt;Control character (“Non-printable character” redirects here) - Wikipedia&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;0x0C (form feed, FF, \f, ^L), to cause a printer to eject paper to the top of the next page, or a video terminal to clear the screen.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;From &lt;a href=&quot;https://en.wikipedia.org/wiki/Page_break&quot;&gt;Page break - Wikipedia&lt;/a&gt;: [&lt;sup&gt;&lt;a href=&quot;#footnotes&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;]&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;The form feed character is sometimes used in &lt;em&gt;plain text&lt;/em&gt; files of &lt;em&gt;source code&lt;/em&gt; as a &lt;em&gt;delimiter&lt;/em&gt; for a &lt;em&gt;page break&lt;/em&gt;, or as &lt;em&gt;marker&lt;/em&gt; for &lt;em&gt;sections of code&lt;/em&gt;.
Some editors, in particular &lt;em&gt;emacs&lt;/em&gt; and &lt;em&gt;vi&lt;/em&gt;, have built-in commands to &lt;em&gt;page up/down&lt;/em&gt; on the form feed character.
This convention is predominantly used in Lisp code, and is also seen in C and Python source code.
GNU Coding Standards require such form feeds in C.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;p&gt;From &lt;a href=&quot;https://web.archive.org/web/20130312024614/http://www.bo.infn.it/alice/alice-doc/mll-doc/linux/vi-ex/node15.html&quot;&gt;Insert ASCII Control Characters in Text&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;It is possible to insert ASCII Control Characters while editing test with the insert, append, replace or substitute commands.
Some Control Characters are inserted directly by typing &lt;ctrl&gt;x:&lt;/ctrl&gt;&lt;/p&gt;

  &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;ctrl&amp;gt;G bell
&amp;lt;ctrl&amp;gt;L form feed
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  &lt;/div&gt;

  &lt;p&gt;Be careful: &lt;ctrl&gt;x can operate directly as editor command (i.e. `&lt;ctrl&gt;[` operates **insert break**).&lt;/ctrl&gt;&lt;/ctrl&gt;&lt;/p&gt;

  &lt;p&gt;If we want to insert a *visible &lt;esc&gt;&amp;lt;, we must use: `&lt;ctrl&gt;V` followed by `&lt;esc&gt;`.
The full set of *vi* supported control characters is listed in the following table.&lt;/esc&gt;&lt;/ctrl&gt;&lt;/esc&gt;&lt;/p&gt;

  &lt;p&gt;[ . . . ]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;p&gt;In &lt;a href=&quot;https://www.cogsci.ed.ac.uk/~richard/utf-8.cgi?input=000c&amp;amp;mode=hex&quot;&gt;UTF-8 Tool, select Hex code point&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.cogsci.ed.ac.uk/~richard/utf-8.cgi?input=000c&amp;amp;mode=bytes&quot;&gt;UTF-8 Tool, Hex UTF-8 bytes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Output:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Character: ^L (Invisible in web browser but appears when copy-paste in terminal)
Character name: FORM FEED (FF)
Hex code point: 000C
Decimal code point: 12
Hex UTF-8 bytes: 0C
Octal UTF-8 bytes: 14
UTF-8 bytes as Latin-1 characters bytes: &amp;lt;0C&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Notes:

1. Some browsers may not be able to display all Unicode characters; they may display blanks, boxes, or question marks for some characters. Installing more fonts may help.
2. Cutting and pasting does not work reliably in all browsers.
3. When cutting and pasting hex numbers from dump output on little-endian machines (eg x86), beware of byte order problems.
4. Hex numbers should not be prefixed with &quot;0x&quot;, &quot;U+&quot;, or anything else.
5. When entering a character in UTF-8 as multiple hex or octal bytes, the bytes should be separated by spaces.
6. &quot;UTF-8 bytes as Latin-1 characters&quot; is what you typically see when you display a UTF-8 file with a terminal or editor that only knows about 8-bit characters.
7. Spaces are ignored in the input of bytes as Latin-1 characters, to make it easier to cut-and-paste from dump output.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;p&gt;Additionally (having in mind that the Form Feed character is a non-printable character):&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.fileformat.info/info/charset/UTF-8/list.htm&quot;&gt;Complete Character List for UTF-8&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.fileformat.info/info/unicode/char/000c/index.htm&quot;&gt;Unicode Character ‘FORM FEED (FF)’ (U+000C)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.fileformat.info/info/unicode/char/000c/fontsupport.htm&quot;&gt;Fonts that support U+000C&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.fileformat.info/info/unicode/font/lastresort/u000C.png&quot;&gt;LastResort font&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.fileformat.info/info/unicode/font/unifont/u000C.png&quot;&gt;Unifont font&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;uconv(1)&lt;/code&gt; also says that it’s a &lt;em&gt;control&lt;/em&gt; character.&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% remind -c2 /path/to/.reminders | less | tail -1 | uconv -x &apos;any-name&apos;
\N{&amp;lt;control-000C&amp;gt;}% 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% remind -c2 /path/to/.reminders | less | tail -1 | hexdump
0000000 000c
0000001

% remind -c2 /path/to/.reminders | less | tail -1 | hexdump -c
0000000  \f
0000001

% remind -c2 /path/to/.reminders | less | tail -1 | hexdump -C
00000000  0c                                                |.|
00000001
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;From the man page for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hexdump(1)&lt;/code&gt; - AKA &lt;strong&gt;standard escape notation&lt;/strong&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;     The single character escape sequences described in the C
     standard are supported:

           NUL                  \0
           &amp;lt;alert character&amp;gt;    \a
           &amp;lt;backspace&amp;gt;          \b
           &amp;lt;form-feed&amp;gt;          \f
           &amp;lt;newline&amp;gt;            \n
           &amp;lt;carriage return&amp;gt;    \r
           &amp;lt;tab&amp;gt;                \t
           &amp;lt;vertical tab&amp;gt;       \v
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So, the line with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\f&lt;/code&gt; is &lt;em&gt;form-feed&lt;/em&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;           &amp;lt;form-feed&amp;gt;          \f
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;hexdump-format-strings&quot;&gt;hexdump Format Strings&lt;/h2&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% hexdump -e &apos; [iterations]/[byte_count] &quot;[format string]&quot; &apos;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;From the man page for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hexdump(1)&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;A format string contains any number of format units, separated by
whitespace.  A format unit contains up to three items: an iteration
count, a byte count, and a format.

The iteration count is an optional positive integer, which defaults to
one.  Each format is applied iteration count times.

The byte count is an optional positive integer.  If specified it defines
the number of bytes to be interpreted by each iteration of the format.

If an iteration count and/or a byte count is specified, a single slash
must be placed after the iteration count and/or before the byte count to
disambiguate them.  Any whitespace before or after the slash is ignored.

The format is required and must be surrounded by double quote (&quot; &quot;) marks.
It is interpreted as a fprintf-style format string (see fprintf(3)),
with the following exceptions:
---- snip ----
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Continuing with the man page for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hexdump(1)&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;     The hexdump utility also supports the following additional conversion
     strings:

---- snip ----

     _u          Output US ASCII characters, with the exception that control
                 characters are displayed using the following, lower-case,
                 names.  Characters greater than 0xff, hexadecimal, are
                 displayed as hexadecimal strings.

                 000 NUL  001 SOH  002 STX  003 ETX  004 EOT  005 ENQ
                 006 ACK  007 BEL  008 BS   009 HT   00A LF   00B VT
                 00C FF   00D CR   00E SO   00F SI   010 DLE  011 DC1
                 012 DC2  013 DC3  014 DC4  015 NAK  016 SYN  017 ETB
                 018 CAN  019 EM   01A SUB  01B ESC  01C FS   01D GS
                 01E RS   01F US   07F DEL
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So, the control character &lt;strong&gt;FF&lt;/strong&gt; (form feed) is &lt;strong&gt;0xC&lt;/strong&gt; in hexadecimal in ASCII:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;                 00C FF   00D CR   00E SO   00F SI   010 DLE  011 DC1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% remind -c2 /path/to/.reminders | tail -1 | hexdump -e &apos;&quot;%_u&quot;&apos;
ff% 
 
% remind -c2 /path/to/.reminders | tail -1 | hexdump -e &apos;&quot;%_u\n&quot;&apos;
ff
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_p&lt;/code&gt; conversion string outputs characters in the default character set.
&lt;em&gt;Nonprinting characters&lt;/em&gt; are displayed as a single &lt;strong&gt;“.”&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% remind -c2 /path/to/.reminders | tail -1 | hexdump -e &apos;&quot;%_p&quot;&apos;
.% 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_c&lt;/code&gt; conversion string outputs characters in the default character set.
&lt;em&gt;Nonprinting characters&lt;/em&gt; are displayed in three character, zero-padded octal, except for those representable by standard &lt;em&gt;escape notation&lt;/em&gt; (see above), which are displayed as two character strings.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% remind -c2 /path/to/.reminders | tail -1 | hexdump -e &apos;&quot;%_c&quot;&apos;
\f% 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;p&gt;Output named characters:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% remind -c2 /path/to/.reminders | less | tail -1 | od -a
0000000   ff
0000001
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Output C-style escaped characters:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% remind -c2 /path/to/.reminders | less | tail -1 | od -c
0000000   \f
0000001
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Combine &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-a&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-c&lt;/code&gt; options to display both named characters and C-style escaped characters:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% remind -c2 /path/to/.reminders | less | tail -1 | od -a -c
0000000   ff
          \f
0000001
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;From the man page for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;od(1)&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;     -a         Output named characters.  Equivalent to -t a.
     -c         Output C-style escaped characters.  Equivalent to -t c.

     -t type    Specify the output format.  The type argument is a string
                containing one or more of the following kinds of type
                specifiers:

                a       Named characters (ASCII).  Control characters are
                        displayed using the following names:

                        000 NUL 001 SOH 002 STX 003 ETX 004 EOT 005 ENQ
                        006 ACK 007 BEL 008 BS  009 HT  00A NL  00B VT
                        00C FF  00D CR  00E SO  00F SI  010 DLE 011 DC1
                        012 DC2 013 DC3 014 DC4 015 NAK 016 SYN 017 ETB
                        018 CAN 019 EM  01A SUB 01B ESC 01C FS  01D GS
                        01E RS  01F US  020 SP  07F DEL

                c       Characters in the default character set.  Non-printing
                        characters are represented as 3-digit octal character
                        codes, except the following characters, which are
                        represented as C escapes:

                        NUL              \0
                        alert            \a
                        backspace        \b
                        newline          \n
                        carriage-return  \r
                        tab              \t
                        vertical tab     \v

                        Multi-byte characters are displayed in the area
                        corresponding to the first byte of the character.  The
                        remaining bytes are shown as ‘**’.

                [d|o|u|x][C|S|I|L|n]
                        Signed decimal (d), octal (o), unsigned decimal (u) or
                        hexadecimal (x).  Followed by an optional size
                        specifier, which may be either C (char), S (short), I
                        (int), L (long), or a byte count as a decimal integer.

                f[F|D|L|n]
                        Floating-point number.  Followed by an optional size
                        specifier, which may be either F (float), D (double)
                        or L (long double).
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The line:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;                        00C FF  00D CR  00E SO  00F SI  010 DLE 011 DC1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;indicates that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;00C&lt;/code&gt; is &lt;strong&gt;FF&lt;/strong&gt; (Form Feed).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Position&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Dump (ASCII dump) the first byte (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-j &amp;lt;skip&amp;gt;&lt;/code&gt; option: skip &amp;lt;skip&amp;gt; bytes), that is, skip zero (0) bytes), using named characters and dumping no more than 1 byte:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% remind -c2 /path/to/.reminders | tail -1 | od -An -a -j 0 -N 1
          ff
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Same as above but skip the first byte:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% remind -c2 /path/to/.reminders | tail -1 | od -An -a -j 1 -N 1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If you try to skip 2 bytes, which is end of input in this case:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% remind -c2 /path/to/.reminders | tail -1 | od -An -a -j 2 -N 1
od: cannot skip past end of input
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;p&gt;From &lt;a href=&quot;https://en.wikipedia.org/wiki/Unicode_control_characters&quot;&gt;Unicode control characters - Wikipedia&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;

  &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;U+000C FORM FEED (FF)&lt;/code&gt; (denotes a page break in a plain text file)&lt;/p&gt;

&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;p&gt;From &lt;a href=&quot;https://en.wikipedia.org/wiki/C0_and_C1_control_codes&quot;&gt;C0 and C1 control codes&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;The C0 and C1 control code or control character sets define control codes for use in text by computer systems that use ASCII and derivatives of ASCII.
The codes represent additional information about the text, such as the position of a cursor, an instruction to start a new line, or a message that the text has been received.&lt;/p&gt;

  &lt;p&gt;[ . . . ]&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;C0 controls&lt;/strong&gt;&lt;/p&gt;

  &lt;p&gt;ASCII defines 32 control characters, plus the DEL character.
This large number of codes was desirable at the time, as multi-byte controls would require implementation of a state machine in the terminal, which was very difficult with contemporary electronics and mechanical terminals.&lt;/p&gt;

  &lt;p&gt;Only a few codes have maintained their use: BEL, ESC, and the format effector (FEn) characters BS, TAB, LF, VT, &lt;strong&gt;FF&lt;/strong&gt;, and CR.&lt;/p&gt;

  &lt;p&gt;[ . . . ]&lt;/p&gt;

  &lt;p&gt;Unicode provides Control Pictures that can replace C0 control characters to make them visible on screen.
However, &lt;em&gt;caret notation&lt;/em&gt; is used &lt;em&gt;more often&lt;/em&gt;.&lt;/p&gt;

  &lt;p&gt;From &lt;a href=&quot;https://en.wikipedia.org/wiki/ASCII#Control_characters&quot;&gt;ASCII control codes&lt;/a&gt;, originally defined in &lt;a href=&quot;https://en.wikipedia.org/wiki/ANSI_X3.4&quot;&gt;ANSI X3.4&lt;/a&gt;:&lt;/p&gt;

  &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Caret notation: ^L
Decimal:        12
Hexadecimal:    0C 
Abbreviations:  FE4,FF
Name:           Form Feed
C escape:       \f
Description:    Move down to the top of the next page. 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  &lt;/div&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Control_Pictures&quot;&gt;Control Pictures - AKA Unicode Control Pictures&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Control Pictures is a Unicode block containing characters for graphically representing the C0 control codes, and other control characters. Its block name in Unicode 1.0 was Pictures for Control Codes.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Control Picture for FF (Form Feed): ␌&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;caret-notation&quot;&gt;Caret Notation&lt;/h2&gt;

&lt;p&gt;From &lt;a href=&quot;https://en.wikipedia.org/wiki/Caret_notation&quot;&gt;Caret notation - Wikipedia&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;Caret notation is a notation for control characters in ASCII.
The notation assigns ^A to control-code 1, &lt;em&gt;sequentially&lt;/em&gt; through the alphabet to ^Z assigned to control-code 26 (0x1A).
For the control-codes outside of the range 1–26, the notation extends to the adjacent, non-alphabetic ASCII characters.&lt;/p&gt;

  &lt;p&gt;&lt;em&gt;Often&lt;/em&gt; a control character can be &lt;em&gt;typed&lt;/em&gt; on a keyboard by holding down the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl&lt;/code&gt; and typing the character shown after the &lt;em&gt;caret&lt;/em&gt;.
The notation is often used to describe keyboard shortcuts even though the control character is not actually used (as in “type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;^X&lt;/code&gt; to cut the text”).&lt;/p&gt;

  &lt;p&gt;The meaning or interpretation of, or response to the individual control-codes is &lt;em&gt;not&lt;/em&gt; prescribed by the caret notation.&lt;/p&gt;

  &lt;p&gt;[ . . . ]&lt;/p&gt;

  &lt;p&gt;Description&lt;/p&gt;

  &lt;p&gt;The notation consists of a caret (^) followed by a single character (usually a capital letter). The character has the ASCII code equal to the control code with the bit representing 0x40 reversed.
A useful &lt;em&gt;mnemonic&lt;/em&gt;, this has the effect of rendering the control codes 1 through 26 as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;^A&lt;/code&gt; through &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;^Z&lt;/code&gt;.
Seven ASCII control characters map outside the upper-case alphabet: 0 (NUL) is ^@, 27 (ESC) is ^[, 28 (FS) is ^\, 29 (GS) is ^], 30 (RS) is ^^, 31 (US) is ^_, and 127 (DEL) is ^?.&lt;/p&gt;

  &lt;p&gt;[ . . . ]&lt;/p&gt;

  &lt;p&gt;There is no corresponding version of the caret notation for control-codes with more than 7 bits such as the C1 control characters from 128–159 (0x80–0x9F).
Some programs that produce caret notation show these as backslash and octal (“\200” through “\237”).&lt;/p&gt;

  &lt;p&gt;[ . . . ]&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;See also&lt;/strong&gt;&lt;/p&gt;

  &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/C0_and_C1_control_codes&quot;&gt;C0 and C1 control codes&lt;/a&gt;, which shows the caret notation for all C0 control codes as well as DEL.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;From the man page for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;less(1)&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;DESCRIPTION
   Less is a program similar to more(1), but it has many more features.
   Less does not have to read the entire input file before starting, so
   with large input files it starts up faster than text editors like
   vi(1).  Less uses termcap (or terminfo on some systems), so it can run
   on a variety of terminals.  There is even limited support for hardcopy
   terminals.  (On a hardcopy terminal, lines which should be printed at
   the top of the screen are prefixed with a caret.)

---- snip ----

   -r or --raw-control-chars
          Causes &quot;raw&quot; control characters to be displayed.  The default is
          to display control characters using the caret notation; for
          example, a control-A (octal 001) is displayed as &quot;^A&quot; (with some
          exceptions as described under the -U option).  Warning: when the
          -r option is used, less cannot keep track of the actual
          appearance of the screen (since this depends on how the screen
          responds to each type of control character).  Thus, various
          display problems may result, such as long lines being split in
          the wrong place.

          USE OF THE -r OPTION IS NOT RECOMMENDED.

---- snip ----

   --intr=c
          Use the character c instead of ^X to interrupt a read when the
          &quot;Waiting for data&quot; message is displayed.  c must be an ASCII
          character; that is, one with a value between 1 and 127
          inclusive.  A caret followed by a single character can be used
          to specify a control character.
---- snip ----

       Control and binary characters are displayed in standout (reverse
       video).  Each such character is displayed in caret notation if possible
       (e.g. ^A for control-A).  Caret notation is used only if inverting the
       0100 bit results in a normal printable character.  Otherwise, the
       character is displayed as a hex number in angle brackets.  This format
       can be changed by setting the LESSBINFMT environment variable.

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Extracted from above:&lt;/p&gt;

&lt;p&gt;On a hardcopy terminal, lines which should be printed &lt;em&gt;at the top&lt;/em&gt; of the screen are prefixed with a &lt;em&gt;caret&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;default&lt;/em&gt; is to display &lt;em&gt;control characters&lt;/em&gt; using the &lt;em&gt;caret notation&lt;/em&gt;; for example, a control-A (octal 001) is displayed as “^A” (with some exceptions as described under the -U option).&lt;/p&gt;

&lt;p&gt;A &lt;em&gt;caret&lt;/em&gt; followed by a single character can be used to specify a &lt;em&gt;control character&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Control&lt;/em&gt; and binary characters are displayed in standout (reverse video).
Each such character is displayed in &lt;em&gt;caret notation&lt;/em&gt; if possible (e.g. ^A for control-A).
&lt;em&gt;Caret notation&lt;/em&gt; is used only if inverting the 0100 bit results in a normal printable character.&lt;/p&gt;

&lt;p&gt;And, from the man page for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lesskey(1)&lt;/code&gt;:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;The characters in the string may appear literally, or be &lt;em&gt;prefixed&lt;/em&gt; by a &lt;em&gt;caret&lt;/em&gt; to indicate a &lt;em&gt;control key&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;footnotes&quot;&gt;Footnotes&lt;/h2&gt;

&lt;p&gt;[1] &lt;a href=&quot;https://utf8-playground.netlify.app/&quot;&gt;&lt;strong&gt;UTF-8 Encoding&lt;/strong&gt; – UTF-8 Playground&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;UTF-8 Encoding&lt;/strong&gt;&lt;/p&gt;

  &lt;p&gt;UTF-8 is a &lt;strong&gt;variable-width&lt;/strong&gt; character encoding designed to represent &lt;em&gt;every&lt;/em&gt; character in the &lt;em&gt;Unicode&lt;/em&gt; character set, encompassing characters from most of the world’s writing systems.&lt;/p&gt;

  &lt;p&gt;It encodes characters using &lt;strong&gt;one&lt;/strong&gt; to &lt;strong&gt;four&lt;/strong&gt; bytes.
The &lt;em&gt;first 128 characters&lt;/em&gt; (U+0000 to U+007F) are encoded with a &lt;strong&gt;single byte&lt;/strong&gt;, ensuring backward &lt;em&gt;compatibility&lt;/em&gt; with &lt;strong&gt;ASCII&lt;/strong&gt; (read my post on this↗), while &lt;em&gt;other&lt;/em&gt; characters require &lt;em&gt;two&lt;/em&gt;, &lt;em&gt;three&lt;/em&gt;, or &lt;em&gt;four&lt;/em&gt; bytes.&lt;/p&gt;

  &lt;p&gt;The &lt;em&gt;leading&lt;/em&gt; bits of the &lt;em&gt;first&lt;/em&gt; byte determine the &lt;em&gt;total number of bytes&lt;/em&gt; in the character.
These bits follow &lt;em&gt;one of four specific patterns&lt;/em&gt;, which indicate how many &lt;em&gt;continuation&lt;/em&gt; bytes follow.&lt;/p&gt;

  &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;   0xxxxxxx: 1 byte
       0xxxxxxx
   110xxxxx: 2 bytes
       110xxxxx 10xxxxxx
   1110xxxx: 3 bytes
       1110xxxx 10xxxxxx 10xxxxxx
   11110xxx: 4 bytes
       11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  &lt;/div&gt;

  &lt;p&gt;The &lt;em&gt;second, third, and fourth&lt;/em&gt; bytes in a multi-byte sequence &lt;em&gt;always&lt;/em&gt; start with &lt;strong&gt;10&lt;/strong&gt;.
This indicates that these bytes are continuation bytes, following the main byte.&lt;/p&gt;

  &lt;p&gt;The remaining bits in the main byte, along with the bits in the continuation bytes, are combined to form the character’s code point.
A code point serves as a unique identifier for a character in the Unicode character set.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;[2] From the man page for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xxd(1)&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;   -g bytes | -groupsize bytes
         Separate the output of every &amp;lt;bytes&amp;gt; bytes (two hex characters
         or eight bit digits each) by a whitespace.  Specify -g 0 to
         suppress grouping.  &amp;lt;Bytes&amp;gt; defaults to 2 in normal mode, 4 in
         little-endian mode and 1 in bits mode.  Grouping does not apply
         to PostScript or include style.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;[3] Rest assured that it’s known how to convert binary to decimal:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;0 x 2^0 = 0 x 1 = 0
0 x 2^1 = 0 x 2 = 0
1 x 2^2 = 1 x 4 = 4
1 x 2^3 = 1 x 8 = 8
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;4 + 8 = 12
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;[4] More about Page break/Form feed &lt;a href=&quot;https://en.wikipedia.org/wiki/Page_break&quot;&gt;Page break - Wikipedia&lt;/a&gt;: [&lt;sup&gt;&lt;a href=&quot;#footnotes&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;]&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;A &lt;em&gt;page break&lt;/em&gt; is a marker in an electronic document that tells the document interpreter the content which follows is part of a new page.
A page break causes a &lt;strong&gt;form feed&lt;/strong&gt; to be sent to the printer during &lt;em&gt;spooling&lt;/em&gt; of the document to the printer.
It is one of the elements that contributes to &lt;em&gt;pagination&lt;/em&gt;.&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;Form feed&lt;/strong&gt;&lt;/p&gt;

  &lt;p&gt;Form feed is a &lt;em&gt;page-breaking&lt;/em&gt; ASCII &lt;em&gt;control character&lt;/em&gt;.
It directs the printer to eject the current page and to continue printing at the top of another.
It will often also cause a carriage return.
The form feed character code is defined as &lt;strong&gt;12&lt;/strong&gt; (&lt;strong&gt;0xC&lt;/strong&gt; in hexadecimal), and may be represented as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl+L&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;^L&lt;/code&gt;.&lt;/p&gt;

  &lt;p&gt;In a related use, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl+L&lt;/code&gt; can be pressed to clear the screen in Unix shells such as bash, or redraw the screen in TUI programs like vi/emacs.
In the C programming language (and other languages derived from C), the form feed character is represented as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&apos;\f&apos;&lt;/code&gt;.&lt;/p&gt;

  &lt;p&gt;Unicode also provides the character &lt;a href=&quot;https://www.unicode.org/charts/PDF/U2190.pdf&quot;&gt;U+21A1 ↡ DOWNWARDS TWO HEADED ARROW&lt;/a&gt; as a printable symbol for a form feed (not as the form feed itself).
The form feed character is considered &lt;em&gt;whitespace&lt;/em&gt; by the C character classification function &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;isspace()&lt;/code&gt;.&lt;/p&gt;

  &lt;p&gt;[ . . . ]&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;Semantic use&lt;/strong&gt;&lt;/p&gt;

  &lt;p&gt;The form feed character is sometimes used in &lt;em&gt;plain text&lt;/em&gt; files of &lt;em&gt;source code&lt;/em&gt; as a &lt;em&gt;delimiter&lt;/em&gt; for a &lt;em&gt;page break&lt;/em&gt;, or as &lt;em&gt;marker&lt;/em&gt; for &lt;em&gt;sections of code&lt;/em&gt;.
Some editors, in particular &lt;em&gt;emacs&lt;/em&gt; and &lt;em&gt;vi&lt;/em&gt;, have built-in commands to &lt;em&gt;page up/down&lt;/em&gt; on the form feed character.
This convention is predominantly used in Lisp code, and is also seen in C and Python source code.
GNU Coding Standards require such form feeds in C. [&lt;sup&gt;&lt;a href=&quot;#footnotes&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;[5] &lt;a href=&quot;https://www.gnu.org/prep/standards/standards.html#index-control_002dL&quot;&gt;GNU Coding Standards - Use formfeed characters (control-L) to divide the program into pages at logical places&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;Please use formfeed characters (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;control-L&lt;/code&gt;) to &lt;em&gt;divide&lt;/em&gt; the program into &lt;em&gt;pages&lt;/em&gt; at &lt;em&gt;logical places&lt;/em&gt; (but not within a function).
It does not matter just how long the pages are, since they do not have to fit on a printed page.
The formfeeds should appear &lt;em&gt;alone on lines by themselves&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;references&quot;&gt;References&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dianne.skoll.ca/projects/remind/&quot;&gt;Remind - a sophisticated calendar and alarm program&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://iamvishnu.com/posts/utf8-is-brilliant-design&quot;&gt;UTF-8 is a Brilliant Design&lt;/a&gt;
(Posted on 2025-09-12. Retrieved on 2025-09-20.)
    &lt;blockquote&gt;
      &lt;p&gt;The first time I learned about UTF-8 encoding, I was fascinated by how well-thought and brilliantly it was designed to represent millions of characters from different languages and scripts, and &lt;strong&gt;still be backward compatible with ASCII&lt;/strong&gt;.&lt;/p&gt;

      &lt;p&gt;Basically UTF-8 uses 32 bits and the old ASCII uses 7 bits, but UTF-8 is designed in such a way that:&lt;/p&gt;
      &lt;ul&gt;
        &lt;li&gt;Every ASCII encoded file is a valid UTF-8 file.&lt;/li&gt;
        &lt;li&gt;Every UTF-8 encoded file that has only ASCII characters is a valid ASCII file.&lt;/li&gt;
      &lt;/ul&gt;

      &lt;p&gt;Designing a system that scales to millions of characters and still be compatible with the old systems that use just 128 characters is a brilliant design.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://utf8-playground.netlify.app/&quot;&gt;UTF-8 Playground&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;&lt;strong&gt;UTF-8 Encoding&lt;/strong&gt;&lt;/p&gt;

      &lt;p&gt;UTF-8 is a &lt;strong&gt;variable-width&lt;/strong&gt; character encoding designed to represent &lt;em&gt;every&lt;/em&gt; character in the &lt;em&gt;Unicode&lt;/em&gt; character set, encompassing characters from most of the world’s writing systems.&lt;/p&gt;

      &lt;p&gt;It encodes characters using &lt;strong&gt;one&lt;/strong&gt; to &lt;strong&gt;four&lt;/strong&gt; bytes.
The &lt;em&gt;first 128 characters&lt;/em&gt; (U+0000 to U+007F) are encoded with a &lt;strong&gt;single byte&lt;/strong&gt;, ensuring backward &lt;em&gt;compatibility&lt;/em&gt; with &lt;strong&gt;ASCII&lt;/strong&gt; (read my post on this↗), while &lt;em&gt;other&lt;/em&gt; characters require &lt;em&gt;two&lt;/em&gt;, &lt;em&gt;three&lt;/em&gt;, or &lt;em&gt;four&lt;/em&gt; bytes.&lt;/p&gt;

      &lt;p&gt;The &lt;em&gt;leading&lt;/em&gt; bits of the &lt;em&gt;first&lt;/em&gt; byte determine the &lt;em&gt;total number of bytes&lt;/em&gt; in the character.
These bits follow &lt;em&gt;one of four specific patterns&lt;/em&gt;, which indicate how many &lt;em&gt;continuation&lt;/em&gt; bytes follow.&lt;/p&gt;

      &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;   0xxxxxxx: 1 byte
       0xxxxxxx
   110xxxxx: 2 bytes
       110xxxxx 10xxxxxx
   1110xxxx: 3 bytes
       1110xxxx 10xxxxxx 10xxxxxx
   11110xxx: 4 bytes
       11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;      &lt;/div&gt;

      &lt;p&gt;The &lt;em&gt;second, third, and fourth&lt;/em&gt; bytes in a multi-byte sequence &lt;em&gt;always&lt;/em&gt; start with &lt;strong&gt;10&lt;/strong&gt;.
This indicates that these bytes are continuation bytes, following the main byte.&lt;/p&gt;

      &lt;p&gt;The remaining bits in the main byte, along with the bits in the continuation bytes, are combined to form the character’s code point.
A code point serves as a unique identifier for a character in the Unicode character set.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.fileformat.info/info/charset/UTF-8/list.htm&quot;&gt;Complete Character List for UTF-8&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.fileformat.info/info/unicode/char/000c/index.htm&quot;&gt;Unicode Character ‘FORM FEED (FF)’ (U+000C)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.fileformat.info/info/unicode/char/000c/fontsupport.htm&quot;&gt;Fonts that support U+000C&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.fileformat.info/info/unicode/font/lastresort/u000C.png&quot;&gt;LastResort font - fileformat&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.fileformat.info/info/unicode/font/unifont/u000C.png&quot;&gt;Unifont font - fileformat&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Control_character&quot;&gt;Control character - Wikipedia&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Page_break&quot;&gt;Page break - Wikipedia&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/C0_and_C1_control_codes&quot;&gt;C0 and C1 control codes&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/20885941/how-to-get-the-unicode-characters-for-ctrlb-ctrll-altk-etc&quot;&gt;How to get the unicode characters for CTRL+B, CTRL+L, ALT+K, etc…?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://garbagecollected.org/2017/01/31/four-column-ascii/&quot;&gt;Four Column ASCII&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://news.ycombinator.com/item?id=13499386&quot;&gt;I always thought it was a shame the ASCII table is rarely shown in columns (or rows) of 32&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;I always thought it was a shame the ascii table is rarely shown in columns (or rows) of 32, as it makes a lot of this quite obvious. e.g., &lt;a href=&quot;http://pastebin.com/cdaga5i1&quot;&gt;http://pastebin.com/cdaga5i1&lt;/a&gt;&lt;/p&gt;

      &lt;p&gt;It becomes immediately obvious why, e.g., &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;^[&lt;/code&gt; becomes &lt;strong&gt;escape&lt;/strong&gt;.
Or that the alphabet is just &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;40h&lt;/code&gt; &lt;strong&gt;+&lt;/strong&gt; the &lt;em&gt;ordinal position of the letter&lt;/em&gt; (or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;60h&lt;/code&gt; for &lt;em&gt;lower-case&lt;/em&gt;).
Or that we &lt;em&gt;shift&lt;/em&gt; between &lt;em&gt;upper&lt;/em&gt; &amp;amp; &lt;em&gt;lower&lt;/em&gt;-case with a &lt;em&gt;single bit&lt;/em&gt;.&lt;/p&gt;

      &lt;p&gt;esr’s rendering of the table - forcing it to fit hexadecimal as eight groups of 4 bits, rather than four groups of 5 bits, makes the relationship between &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;^I&lt;/code&gt; and &lt;em&gt;tab&lt;/em&gt;, or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;^[&lt;/code&gt; and &lt;em&gt;escape&lt;/em&gt;, nearly invisible.&lt;/p&gt;

      &lt;p&gt;It’s like making the periodic table 16 elements wide because we’re partial to hex, and then wondering why no-one can spot the relationships anymore.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.cogsci.ed.ac.uk/~richard/utf-8.cgi&quot;&gt;UTF-8 Tool&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://journal.bsd.cafe/2025/09/01/why-caffe-may-not-be-caffe/&quot;&gt;Why “caffè” may not be “caffè”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://unicodebook.readthedocs.io/unicode_encodings.html&quot;&gt;Unicode encodings - Programming with Unicode book&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20130312024614/http://www.bo.infn.it/alice/alice-doc/mll-doc/linux/vi-ex/node15.html&quot;&gt;Insert ASCII Control Characters in Text&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/ASCII#Control_characters&quot;&gt;ASCII control codes&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt&quot;&gt;Unicode lookup table source: UnicodeData.txt&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://unicode-org.github.io/icu/userguide/transforms/general/rules.html&quot;&gt;Transform Rule Tutorial - ICU Documentation (useful for uconv)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://exploringjs.com/js/book/ch_unicode.html&quot;&gt;Unicode - a brief introduction (advanced&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.johndcook.com/blog/2019/09/28/control-characters/&quot;&gt;Control keys and control characters&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Control-[&lt;/p&gt;

      &lt;p&gt;Some control characters correspond to characters other than letters.
If you flip the second bit of the ASCII code for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[&lt;/code&gt; you get the control character for &lt;strong&gt;escape&lt;/strong&gt;.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;And in some software, such as &lt;em&gt;vi&lt;/em&gt; or &lt;em&gt;Emacs&lt;/em&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Control-[&lt;/code&gt; has the &lt;em&gt;same effect&lt;/em&gt; as the &lt;em&gt;escape key&lt;/em&gt;.
    &lt;blockquote&gt;

      &lt;p&gt;[ . . . ]&lt;/p&gt;

      &lt;p&gt;[1] Control keys are often written with capital letters, like Control-H.
This can be misleading if you think this means you have to also hold down the shift key as if you were typing a capital H.
Control-h would be better notation.
But the ASCII codes for control characters correspond to capital letters, so I use capital letters here.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.johndcook.com/blog/2019/09/09/how-utf-8-works/&quot;&gt;How UTF-8 works&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.asciitable.com/&quot;&gt;ASCII Table&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://old.reddit.com/r/programming/comments/2eixhe/gnu_coding_standards_stipulates_formfeed_in/&quot;&gt;GNU coding standards stipulates formfeed in source code. Why? (gnu.org)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;further-reading&quot;&gt;Further Reading&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Category:Control_characters&quot;&gt;Category:Control characters - Wikipedia&lt;/a&gt;
    &lt;blockquote&gt;

      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Category:Unicode_special_code_points&quot;&gt;Subcategory (of the Category:Control characters) - Unicode special code points (6 P)&lt;/a&gt; 
&lt;em&gt;For formatting characters, see &lt;a href=&quot;https://en.wikipedia.org/wiki/Category:Unicode_formatting_code_points&quot;&gt;Category:Unicode formatting code points&lt;/a&gt;.&lt;/em&gt;&lt;/li&gt;
      &lt;/ul&gt;

      &lt;p&gt;This category lists code points in Unicode that have a special meaning, as defined by Unicode.
Sometimes these are called, incorrectly, “special characters”, but not all are characters.
Most clearly since some code points designated “&amp;lt;not a character&amp;gt;”.&lt;/p&gt;

      &lt;p&gt;(without links for Pages on Wikipedia):&lt;/p&gt;

      &lt;ul&gt;
        &lt;li&gt;Byte order mark (BOM)&lt;/li&gt;
        &lt;li&gt;Combining character&lt;/li&gt;
        &lt;li&gt;Combining grapheme joiner&lt;/li&gt;
        &lt;li&gt;Unicode control characters&lt;/li&gt;
        &lt;li&gt;Figure space&lt;/li&gt;
        &lt;li&gt;Regional indicator symbol&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pages in &lt;a href=&quot;https://en.wikipedia.org/wiki/Category:Control_characters&quot;&gt;Category: Control characters&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;(without links for Pages on Wikipedia):&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;Control character&lt;/li&gt;
    &lt;li&gt;Acknowledgement (data networks)&lt;/li&gt;
    &lt;li&gt;Arabic letter mark&lt;/li&gt;
    &lt;li&gt;ASA carriage control characters&lt;/li&gt;
    &lt;li&gt;ASCII control character&lt;/li&gt;
    &lt;li&gt;ASCII control characters&lt;/li&gt;
    &lt;li&gt;ASCII control code&lt;/li&gt;
    &lt;li&gt;ASCII control codes&lt;/li&gt;
    &lt;li&gt;Backspace&lt;/li&gt;
    &lt;li&gt;Bell character&lt;/li&gt;
    &lt;li&gt;Block check character&lt;/li&gt;
    &lt;li&gt;C0 and C1 control codes&lt;/li&gt;
    &lt;li&gt;Cancel character&lt;/li&gt;
    &lt;li&gt;Caret notation&lt;/li&gt;
    &lt;li&gt;Carriage return&lt;/li&gt;
    &lt;li&gt;Combining grapheme joiner&lt;/li&gt;
    &lt;li&gt;Delete character&lt;/li&gt;
    &lt;li&gt;Eight Ones&lt;/li&gt;
    &lt;li&gt;End-of-Text character&lt;/li&gt;
    &lt;li&gt;End-of-Transmission character&lt;/li&gt;
    &lt;li&gt;End-of-Transmission-Block character&lt;/li&gt;
    &lt;li&gt;Enquiry character&lt;/li&gt;
    &lt;li&gt;Escape character&lt;/li&gt;
    &lt;li&gt;Escape sequence&lt;/li&gt;
    &lt;li&gt;Escape sequences in C&lt;/li&gt;
    &lt;li&gt;Figure space&lt;/li&gt;
    &lt;li&gt;Form feed&lt;/li&gt;
    &lt;li&gt;Implicit directional marks&lt;/li&gt;
    &lt;li&gt;Left-to-right mark&lt;/li&gt;
    &lt;li&gt;Line feed&lt;/li&gt;
    &lt;li&gt;Line starve&lt;/li&gt;
    &lt;li&gt;Narrow no-break space&lt;/li&gt;
    &lt;li&gt;Newline&lt;/li&gt;
    &lt;li&gt;Non-breaking space&lt;/li&gt;
    &lt;li&gt;Null character&lt;/li&gt;
    &lt;li&gt;Page break (Form feed)&lt;/li&gt;
    &lt;li&gt;Right-to-left mark&lt;/li&gt;
    &lt;li&gt;Shift Out and Shift In characters&lt;/li&gt;
    &lt;li&gt;Soft hyphen&lt;/li&gt;
    &lt;li&gt;Space (punctuation)&lt;/li&gt;
    &lt;li&gt;Substitute character&lt;/li&gt;
    &lt;li&gt;Syriac Abbreviation Mark&lt;/li&gt;
    &lt;li&gt;Tab character&lt;/li&gt;
    &lt;li&gt;Tab key&lt;/li&gt;
    &lt;li&gt;Word joiner&lt;/li&gt;
    &lt;li&gt;XON/XOFF&lt;/li&gt;
    &lt;li&gt;Zero-width joiner (ZWJ)&lt;/li&gt;
    &lt;li&gt;Zero-width no-break space (ZWNBSP)&lt;/li&gt;
    &lt;li&gt;Zero-width non-joiner (ZWNJ)&lt;/li&gt;
    &lt;li&gt;Zero-width space (ZWSP)&lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;man &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;termios(4)&lt;/code&gt;
    &lt;blockquote&gt;

      &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;NAME
     termios - general terminal line discipline
[ . . . ]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;      &lt;/div&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

</description>
        <pubDate>Sun, 21 Sep 2025 17:28:08 +0000</pubDate>
        <link>https://duskopijetlovic.github.io/ascii/cli/terminal/xterm/shell/console/rs232serial/plaintext/text/x11/xorg/howto/font/typography/utf8/unicode/unix/it/computing/history/2025/09/21/ascii-utf8-unicode-control-characters.html</link>
        <guid isPermaLink="true">https://duskopijetlovic.github.io/ascii/cli/terminal/xterm/shell/console/rs232serial/plaintext/text/x11/xorg/howto/font/typography/utf8/unicode/unix/it/computing/history/2025/09/21/ascii-utf8-unicode-control-characters.html</guid>
        
        
        <category>ascii</category>
        
        <category>cli</category>
        
        <category>terminal</category>
        
        <category>xterm</category>
        
        <category>shell</category>
        
        <category>console</category>
        
        <category>rs232serial</category>
        
        <category>plaintext</category>
        
        <category>text</category>
        
        <category>x11</category>
        
        <category>xorg</category>
        
        <category>howto</category>
        
        <category>font</category>
        
        <category>typography</category>
        
        <category>utf8</category>
        
        <category>unicode</category>
        
        <category>unix</category>
        
        <category>it</category>
        
        <category>computing</category>
        
        <category>history</category>
        
      </item>
    
      <item>
        <title>Simple X11 Setup - Notes</title>
        <description>&lt;p&gt;Word cloud: font, typography, kerning, bitmap, XLFD, monospaced, 
                  fixed, fixed-pitch, fixed-width, non-proportional, 
                  proportional, variable-pitch, glyph, XLFD, laptop,
                  14-inch screen, monitor, display, WUXGA (Wide Ultra XGA), 
                  High DPI (HighDPI or HiDPI), Very High Density (140+ PPI), 
                  FreeType, Xft, fontconfig, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.otf&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.ttf&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.ttc&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.bdf&lt;/code&gt;, 
                  Unicode, UTF-8,
                  xterm, terminal, shell, CLI&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;my-notes-from-how-to-configure-x11-in-a-simple-way-by-eugene-andrienko&quot;&gt;My Notes from &lt;a href=&quot;https://eugene-andrienko.com/it/2025/07/24/x11-configuration-simple.html&quot;&gt;How to configure X11 in a simple way&lt;/a&gt; by Eugene Andrienko&lt;/h1&gt;
&lt;p&gt;(Posted on 2025-07-24. Retrieved on 2025-08-31.)&lt;/p&gt;

&lt;h1 id=&quot;my-primary-concerns&quot;&gt;My Primary Concerns&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;Display: 14-inch WUXGA (Wide Ultra XGA), 1920 by 1200 pixels
    &lt;ul&gt;
      &lt;li&gt;So, not strictly High DPI (HighDPI or HiDPI) display but still a Very High Density (140+ PPI) panel&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Fonts
    &lt;ul&gt;
      &lt;li&gt;Shell, terminal - &lt;strong&gt;XTerm&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;Proportional vs. monospace(d) vs. bitmap (pixel fonts) vs. fixed bitmap vs. TrueType (Xft) [&lt;sup&gt;&lt;a href=&quot;#footnotes&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;]&lt;/li&gt;
      &lt;li&gt;Unicode&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Brightness&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;laptop---main-screen-built-in-display&quot;&gt;Laptop - Main Screen (Built-In Display)&lt;/h2&gt;

&lt;h1 id=&quot;very-high-density-140-ppi-dpi-display&quot;&gt;Very High Density (140+ PPI) DPI Display&lt;/h1&gt;

&lt;p&gt;aka: “Retina” display&lt;/p&gt;

&lt;p&gt;How to setup X server to operate with a Very High Density (140+ PPI) display?&lt;/p&gt;

&lt;p&gt;Laptop (and screen/display) used for this setup: &lt;strong&gt;Lenovo ThinkPad T14s Gen3&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Lenovo ThinkPad T14s Gen3&lt;/li&gt;
  &lt;li&gt;Screen: 14.0” WUXGA (1920 x 1200), IPS, Anti-Glare, Touch, 100%sRGB, 500 nits, ePrivacy Filter&lt;/li&gt;
  &lt;li&gt;Display size: 14 inch (diagonal)&lt;/li&gt;
  &lt;li&gt;Display aspect ratio: 16:10&lt;/li&gt;
  &lt;li&gt;Resolution (Pixel format): 1920 (H) x 1200 (V)&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Active area: 301mm (H) x 188mm (V)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;CPU: 12th Gen Intel Core i7-1280P&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;RAM: 32 GB&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;OS: FreeBSD 14&lt;/li&gt;
  &lt;li&gt;Shell: csh&lt;/li&gt;
  &lt;li&gt;Window Manager: fvwm3 1.1.0&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;starting-x-x-window-system-x11&quot;&gt;Starting X (X Window System, X11)&lt;/h1&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% exec xinit  # OR: exec startx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;brightness&quot;&gt;Brightness&lt;/h1&gt;

&lt;p&gt;Add the following two lines to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/boot/loader.conf&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;acpi_ibm_load=&quot;YES&quot;
acpi_video_load=&quot;YES&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Current brightness:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% backlight
brightness: 32
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Change brightness:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% backlight 80
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% pkg search gammy
gammy-0.9.64_1  Adaptive screen brightness and temperature for Windows and Unix
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% sudo pkg install gammy
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Start gammy:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% gammy
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;dpi&quot;&gt;DPI&lt;/h1&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xrandr | wc -l
      47
 
% xrandr --verbose | wc -l
     440

% xrandr | grep &quot;connected primary&quot;
eDP-1 connected primary 1920x1200+0+0 (normal left inverted right x axis y axis) 301mm x 188mm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So, with active area dimensions 301mm x 188mm, my &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/usr/local/etc/X11/xorg.conf.d/10-intel.conf&lt;/code&gt; file looks like this:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% cat /usr/local/etc/X11/xorg.conf.d/10-intel.conf
Section &quot;Monitor&quot;
    Identifier  &quot;MainMonitor&quot;
    Option      &quot;Primary&quot; &quot;true&quot;
    DisplaySize 301 188
EndSection

Section &quot;Device&quot;
    Identifier  &quot;intel&quot;
    Option      &quot;Monitor-eDP-1&quot;   &quot;MainMonitor&quot;
    Option      &quot;Monitor-HDMI-1&quot;  &quot;ExternalMonitor&quot;
EndSection

Section &quot;Screen&quot;
    Identifier &quot;MainScreen&quot;
    Device     &quot;intel&quot;
    Monitor    &quot;MainMonitor&quot;
EndSection
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Before the change, DPI on this system was set to 110:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% grep &quot;Xft.dpi&quot; ~/.Xresources
Xft.dpi:    110
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xrdb -query | grep dpi 
Xft.dpi:        110
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;What should be DPI for this laptop’s screen?&lt;/p&gt;

&lt;p&gt;To calculate, use a DPI calculator/PPI calculator; for example:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.sven.de/dpi/&quot;&gt;https://www.sven.de/dpi/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For this laptop’s monitor:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Horizontal resolution: 1920 pixels&lt;/li&gt;
  &lt;li&gt;Vertical resolution: 1200 pixels&lt;/li&gt;
  &lt;li&gt;Diagonal: 14 inches&lt;/li&gt;
  &lt;li&gt;Aspect ratio: 16:10&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Display size:
11.87&quot; × 7.42&quot; = 88.09in (30.15cm × 18.85cm = 568.32cm) at 
161.73 PPI, 0.1571mm dot pitch, 26155 PPI
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;That is: &lt;strong&gt;DPI&lt;/strong&gt; is &lt;strong&gt;161.73&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Edit the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.Xresources&lt;/code&gt; file, and change it from 110 to 161.73.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% grep &quot;Xft.dpi&quot; ~/.Xresources
Xft.dpi:    161.73
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;After that, run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xrdb(1)&lt;/code&gt; to reload the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.Xresources&lt;/code&gt; and replace current settings:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xrdb ~/.Xresources
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;DPI is now set to 161.73:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xrdb -query | grep dpi
Xft.dpi:        161.73
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;fonts-for-use-with-xterm&quot;&gt;Fonts for Use with XTerm&lt;/h2&gt;

&lt;p&gt;In general, for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm(1)&lt;/code&gt;, I prefer using bitmapped (old-style) fixed width fonts when I’m using an external monitor, while for a laptop, I like better OpenType (OTF, new-style) and TrueType fonts (TTF, new-style).&lt;/p&gt;

&lt;p&gt;From &lt;a href=&quot;https://superuser.com/questions/920572/install-ttf-font-on-xterm-cygwin&quot;&gt;Install TTF font on xterm (cygwin)&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;TrueType fonts (TTF) with X are usually done using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fontconfig&lt;/code&gt;.
One of its features is that it looks by default in the &lt;strong&gt;.fonts&lt;/strong&gt; directory under your &lt;strong&gt;home&lt;/strong&gt; directory.
You would use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fc-list&lt;/code&gt; to list the fonts which are available, and use them with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-fa&lt;/code&gt; (family name) and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-fs&lt;/code&gt; (font size) options of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm&lt;/code&gt;. (while &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xfd&lt;/code&gt; has a corresponding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-fa&lt;/code&gt; option, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xfontsel&lt;/code&gt; does not).&lt;/p&gt;

  &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xset&lt;/code&gt; on the other hand, looks for &lt;strong&gt;bitmap&lt;/strong&gt; fonts which are referenced using the &lt;strong&gt;XLFD&lt;/strong&gt; naming convention.
You would use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xlsfonts&lt;/code&gt; for listing those, and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-fn&lt;/code&gt; option of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;fonts-for-use-with-xterm-on-this-laptop---main-screen-built-in-display&quot;&gt;Fonts for Use with XTerm on This Laptop - Main Screen (Built-In Display)&lt;/h3&gt;

&lt;p&gt;In order of preference:&lt;/p&gt;

&lt;h4 id=&quot;0xproto---opentype-font-otf-truetype-font-ttf&quot;&gt;0xProto - OpenType Font (OTF), TrueType Font (TTF)&lt;/h4&gt;

&lt;p&gt;For this laptop, I prefer &lt;em&gt;0xProto&lt;/em&gt; OpenType/TrueType font, so I start &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm&lt;/code&gt; with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-fa&lt;/code&gt; option (which corresponds to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm&lt;/code&gt;’s &lt;em&gt;faceName&lt;/em&gt; resource, and is used for selecting fonts from the &lt;em&gt;FreeType&lt;/em&gt; library), and I also use the font size (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-fs&lt;/code&gt; option) of &lt;em&gt;12&lt;/em&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -fa 0xProto -fs 12
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;To make it permanent, add the following two lines to your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.Xresources&lt;/code&gt; file:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;XTerm*faceName: 0xProto
XTerm*faceSize: 12
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then, to re-read your Xresources file, and throw away your old resources, run:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xrdb ~/.Xresources
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;x-core-fonts-bitmapped-xlfd-for-xterm-on-this-laptop&quot;&gt;X Core Fonts (Bitmapped, XLFD) for XTerm on This Laptop&lt;/h4&gt;

&lt;p&gt;As mentioned before, for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm&lt;/code&gt; on the laptop I prefer TrueType and OpenType (new-style) fonts.
However, when I sometimes choose to use bitmapped fonts (X core fonts, or old-style font), I like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-adobe-courier-medium-r-normal--24-240-75-75-m-150-iso10646-1&lt;/code&gt;, so I start &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm&lt;/code&gt; with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-fn&lt;/code&gt; option.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -fn &quot;-adobe-courier-medium-r-normal--24-240-75-75-m-150-iso10646-1&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;To make it permanent, add the following line to your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.Xresources&lt;/code&gt; file:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;XTerm*font: -adobe-courier-medium-r-normal--24-240-75-75-m-150-iso10646-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then, to re-read your Xresources file, and throw away your old resources, run:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xrdb ~/.Xresources
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Other X core (bitmapped, XLFD) fonts that look somewhat good on this laptop:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -fn &quot;-b&amp;amp;h-lucidatypewriter-medium-r-normal-sans-34-240-100-100-m-200-iso10646-1&quot;

% xterm -fn &quot;-adobe-courier-medium-r-normal--34-240-100-100-m-200-iso10646-1&quot;

% xterm -fn &quot;-b&amp;amp;h-lucidatypewriter-medium-r-normal-sans-24-240-75-75-m-140-iso10646-1&quot;

% xterm -fn &quot;-b&amp;amp;h-lucidatypewriter-medium-r-normal-sans-26-190-100-100-m-159-iso10646-1&quot;

% xterm -fn &quot;-ibm-courier-medium-r-normal--0-0-0-0-m-0-iso10646-1&quot;

% xterm -fn &quot;-b&amp;amp;h-lucidatypewriter-medium-r-normal-sans-20-140-100-100-m-120-iso10646-1&quot;

% xterm -fn &quot;-misc-fixed-medium-r-normal--20-200-75-75-c-100-iso10646-1&quot;

% xterm -fn &quot;-bitstream-terminal-medium-r-normal--18-140-100-100-c-110-iso8859-1&quot;

% xterm -fa &apos;&apos; -fn &quot;-sun-gallant-medium-r-normal--22-220-75-75-c-120-iso10646-1&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;For the last font (Gallant Font), you have to install it from &lt;a href=&quot;https://github.com/NanoBillion/gallant&quot;&gt;https://github.com/NanoBillion/gallant&lt;/a&gt;.&lt;/p&gt;

&lt;h4 id=&quot;searching-for-bitmap-fonts-x-core-fonts-xlfd-fonts&quot;&gt;Searching for Bitmap Fonts (X Core Fonts, XLFD Fonts)&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;XLFD&lt;/strong&gt;: 14 fields.
Field names are separated by dashes ‘-‘, and an XLFD font name starts with a dash ‘-‘):&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;-fndry-fmly-wght-slant-swdth-adstyl-pxlsz-ptsz-resx-resy-spc-avgwdth-rgstry-encdng
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;For additional searches for an X core font (bitmapped, old-style font), I often use the following XLFD fields.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;* wght (Weight): medium
* slant (Slant): r for roman (or upright)
* swdth (Nominal width): normal, condensed
* pxlsz (height, in pixels, of the type - Also called &quot;body size&quot;)
* ptsz (height, in points, of the type)
* resx (horizontal screen resolution the font was designed for, in DPI 
* resy (vertical screen resolution the font was designed for, in DPI) 
* spc (the kind of spacing used by the font (its *escapement* class); either &apos;p&apos; (a *proportional* font containing characters with varied spacing), &apos;m&apos; (a *monospaced* font containing characters with constant spacing), or &apos;c&apos; (a *character cell* font containing characters with constant spacing and constant height)
* avgwdth (average width of the characters used in the font, in 1/10th pixel units) 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts | wc -l
   23232
 
% xlsfonts -fn &quot;*&quot; | wc -l
   23232
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;For example, for the search below with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xlsfonts(1)&lt;/code&gt; program: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fmly&lt;/code&gt; (family): &lt;em&gt;fixed&lt;/em&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pxlsz&lt;/code&gt; (body size in pixels): &lt;em&gt;18&lt;/em&gt;.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts -fn &quot;*-fixed-*-*-*-*-18-*&quot; | less 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This is good on an external monitor, but too small for this laptop:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -fn &quot;-misc-fixed-medium-r-normal--18-120-100-100-c-90-iso10646-1&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Additional searches:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts -fn &quot;*-fixed-*-*-*-*-24-*&quot; | wc -l
% xlsfonts -fn &quot;*-fixed-*-*-*-*-24-*&quot; | less
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts -fn &quot;-*-*-medium-r-normal-*-24-*&quot; | wc -l
% xlsfonts -fn &quot;-*-*-medium-r-normal-*-24-*&quot; | less 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The following search: spacing (11th field: &lt;em&gt;spc&lt;/em&gt;): ‘m’ for &lt;em&gt;monospaced&lt;/em&gt; - with &lt;em&gt;medium&lt;/em&gt; weight (3rd field: &lt;em&gt;wgth&lt;/em&gt;) and &lt;em&gt;upright&lt;/em&gt; (‘r’ for &lt;em&gt;roman&lt;/em&gt;) slant (4th field: &lt;em&gt;slant&lt;/em&gt;).&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts -fn &quot;-*-*-*-r-normal-*-*-*-*-*-m-*&quot; | wc -l
% xlsfonts -fn &quot;-*-*-*-r-normal-*-*-*-*-*-m-*&quot; | less 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The following search: spacing (11th field: &lt;em&gt;spc&lt;/em&gt;): ‘c’ for &lt;em&gt;character cell&lt;/em&gt; - with &lt;em&gt;medium&lt;/em&gt; weight (3rd field: &lt;em&gt;wgth&lt;/em&gt;) and &lt;em&gt;upright&lt;/em&gt; (‘r’ for &lt;em&gt;roman&lt;/em&gt;) slant (4th field: &lt;em&gt;slant&lt;/em&gt;).&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts -fn &quot;-*-*-medium-r-normal-*-*-*-*-*-c-*&quot; | wc -l
% xlsfonts -fn &quot;-*-*-medium-r-normal-*-*-*-*-*-c-*&quot; | less 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;p&gt;TODO - Clean this section&lt;/p&gt;

&lt;p&gt;For use in X (X11, X Window System), there are two types of fonts:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;X core fonts (old-style bitmapped fixed width fonts and Type1 fonts)&lt;/li&gt;
  &lt;li&gt;OpenType/TrueType (newer) fonts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are two kinds of fonts in X11: server-side (drawn by the X server, shown in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xlsfonts(1)&lt;/code&gt;) and client-side (drawn by the application, shown in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fc-list(1)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://man.freebsd.org/cgi/man.cgi?query=xterm&amp;amp;manpath=FreeBSD+10.2-RELEASE+and+Ports&quot;&gt;https://man.freebsd.org/cgi/man.cgi?query=xterm&amp;amp;manpath=FreeBSD+10.2-RELEASE+and+Ports&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;However (even though &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xfd&lt;/code&gt; accepts a “-fa” option to denote &lt;em&gt;FreeType&lt;/em&gt; fonts), &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xfontsel&lt;/code&gt; has &lt;em&gt;not&lt;/em&gt; been similarly extended.&lt;/p&gt;

  &lt;p&gt;As a workaround, you may try:&lt;/p&gt;

  &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;fc-list :scalable=true:spacing=mono: family
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  &lt;/div&gt;

  &lt;p&gt;to find a list of scalable fixed-pitch fonts which may be  used
for the faceName	resource value.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;xterms-default-font---aka-xterm-uses-x-servers-built-in-fixed-font&quot;&gt;XTerm’s Default Font - aka: XTerm uses X server’s built-in fixed font&lt;/h3&gt;

&lt;p&gt;The default font for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm&lt;/code&gt; is an alias &lt;em&gt;fixed&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;For more about finding out what it resolves to on your system, see [&lt;sup&gt;&lt;a href=&quot;#footnotes&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;].&lt;/p&gt;

&lt;p&gt;In short (TLDR):&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xset -q | grep -A1 &quot;Font Path&quot;
Font Path:
  /usr/local/share/fonts/ ---- snip ----

% ls -1 /usr/local/share/fonts/misc/fonts.*
/usr/local/share/fonts/misc/fonts.alias
/usr/local/share/fonts/misc/fonts.dir
/usr/local/share/fonts/misc/fonts.scale
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;NOTE: With &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xlsfonts(1)&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts -l fixed
DIR  MIN  MAX EXIST DFLT PROP ASC DESC NAME
--&amp;gt;    0  255  some    0   23  11    2 -misc-fixed-medium-r-semicondensed--0-0-75-75-c-0-iso8859-1
--&amp;gt;    0  255  some    0   23  11    2 -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
--&amp;gt;    0  255  some    0   23  11    2 -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
--&amp;gt;    0  255  some    0   23  11    2 -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-koi8-r
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Continuing - with exploring the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fonts.alias&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fonts.dir&lt;/code&gt; files.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% grep ^fixed /usr/local/share/fonts/misc/fonts.alias 
fixed        -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So, on my system, &lt;strong&gt;fixed&lt;/strong&gt; alias resolves to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;NOTE: Note that &lt;em&gt;fixed&lt;/em&gt; is aliased specifically to the ISO 8859-1 version of the font, not to the Unicode version (which would be ISO 10646-1).&lt;/p&gt;

&lt;p&gt;To find out that font’s file:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% grep -- &quot;-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1&quot; /usr/local/share/fonts/misc/fonts.dir 
6x13-ISO8859-1.pcf.gz -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
6x13-ISO8859-10.pcf.gz -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-10
6x13-ISO8859-11.pcf.gz -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-11
6x13-ISO8859-13.pcf.gz -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-13
6x13-ISO8859-14.pcf.gz -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-14
6x13-ISO8859-15.pcf.gz -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-15
6x13-ISO8859-16.pcf.gz -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-16

% ls /usr/local/share/fonts/misc/6x13-ISO8859-1.pcf.gz
/usr/local/share/fonts/misc/6x13-ISO8859-1.pcf.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So, on my system, &lt;strong&gt;fixed&lt;/strong&gt; alias resolves to:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;and that font’s file is:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/usr/local/share/fonts/misc/6x13-ISO8859-1.pcf.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;unicode-support&quot;&gt;Unicode Support&lt;/h3&gt;

&lt;p&gt;If there is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;iso10646-1&lt;/code&gt; in XLFD font name: it supports Unicode.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;-misc-fixed-medium-o-semicondensed--13-120-75-75-c-60-iso10646-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;vs.&lt;/p&gt;

&lt;p&gt;If there is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;iso8859-1&lt;/code&gt; in XLFD font name: it does not support Unicode.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;-misc-fixed-medium-o-semicondensed--13-120-75-75-c-60-iso8859-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;steps-for-laptop-with-an-external-monitor&quot;&gt;Steps for Laptop with an External Monitor&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Open laptop lid&lt;/li&gt;
  &lt;li&gt;Plug in the external monitor&lt;/li&gt;
  &lt;li&gt;If the external monitor is blank, run:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xrandr | grep -w connected
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If the output shows only the internal built-in laptop’s screen, for example:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;eDP-1 connected primary 1920x1200+0+0 (normal left inverted right x axis y axis) 301mm x 188mm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Exit X11 (aka Xorg, or X Window System):&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% pkill Xorg
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Start X11:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% exec xinit
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If the external monitor is now not blank, you can run:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xrandr | grep -w connected
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;OVDE&lt;/p&gt;

&lt;p&gt;In this example, the output shows that the screen is extended (aka spanning desktop).
Here, the external monitor is to the right of the laptop’s monitor:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;eDP-1 connected primary 1920x1200+0+0 (normal left inverted right x axis y axis) 301mm x 188mm
DP-1 connected 2560x1440+1920+0 (normal left inverted right x axis y axis) 518mm x 324mm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If that’s the setup you like, you can stop here.&lt;/p&gt;

&lt;p&gt;If, on the other hand, you want a mirrored configuration, run this shell script:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% ./mirror_ext_monitor_xrandr.sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The content of that script:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% cat mirror_ext_monitor_xrandr.sh
#!/bin/sh

intern=eDP-1
extern=DP-1

xrandr --output &quot;$intern&quot; --primary --auto --output &quot;$extern&quot; --same-as &quot;$intern&quot; --auto
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now, the output from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xrandr&lt;/code&gt; is:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xrandr | grep -w connected
eDP-1 connected primary 1920x1200+0+0 (normal left inverted right x axis y axis) 301mm x 188mm
DP-1 connected 2560x1440+0+0 (normal left inverted right x axis y axis) 518mm x 324mm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;fonts-for-use-with-xterm-on-an-external-monitor&quot;&gt;Fonts for Use with XTerm on an External Monitor&lt;/h3&gt;

&lt;h4 id=&quot;x-core-bitmapped-old-style-fonts&quot;&gt;X Core (Bitmapped, Old-Style) Fonts&lt;/h4&gt;

&lt;p&gt;In contrast to the laptop, with an external monitor, for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm&lt;/code&gt; I prefer bitmapped fonts (X Core fonts, aka old-style fonts).&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -fn &quot;-b&amp;amp;h-lucidatypewriter-medium-r-normal-sans-14-140-75-75-m-90-iso10646-1&quot;

% xterm -fn &quot;-misc-fixed-medium-r-normal--18-120-100-100-c-90-iso8859-1&quot;

% xterm -fn &quot;-misc-fixed-medium-r-normal--20-200-75-75-c-100-iso10646-1&quot;

% xterm -fn &quot;-sun-gallant-medium-r-normal--22-220-75-75-c-120-iso10646-1&quot;
# (You need to install it manually from:
# https://github.com/NanoBillion/gallant)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;truetype-and-opentype-new-style-fonts&quot;&gt;TrueType and OpenType (New-Style) Fonts&lt;/h4&gt;

&lt;p&gt;With &lt;em&gt;Fontconfig&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Good but too big:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -fa &apos;Monospace&apos; -fs 14
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Not so good:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -fa &apos;Monospace&apos; -fs 12
% xterm -fa &apos;Monospace&apos; -fs 11
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;To list monospaced fonts (with using Fontconfig’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fc-list(1)&lt;/code&gt;):&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% fc-list | cut -f2 -d: | sort -u | grep -i Mono 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;hr /&gt;

&lt;p&gt;TODO:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://linux.die.net/HOWTO/Unicode-HOWTO-2.html&quot;&gt;The Unicode HOWTO: Display setup&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;TODO:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://forums.freebsd.org/threads/pleasant-fonts.84570/&quot;&gt;Pleasant Fonts - FreeBSD Forums&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dt.iki.fi/fontconfig-1&quot;&gt;Fonts on Linux, Chapter One: Changing Default and Fallback Fonts with Fontconfig&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://jichu4n.com/posts/how-to-set-default-fonts-and-font-aliases-on-linux/&quot;&gt;How To Set Default Fonts and Font Aliases on Linux&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://utf8-playground.netlify.app/&quot;&gt;UTF8 Playground&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/vishnuharidas/utf8-playground&quot;&gt;UTF8 Playground - Source on GitHub&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://wiki.archlinux.org/title/Font_configuration#Replace_or_set_default_fonts&quot;&gt;Font configuration&lt;/a&gt;&lt;/p&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Although &lt;a href=&quot;https://www.freedesktop.org/wiki/Software/fontconfig/&quot;&gt;Fontconfig&lt;/a&gt; is used often in modern Unix and Unix-like operating systems, some applications rely on the original method of font selection and display, the &lt;a href=&quot;https://wiki.archlinux.org/title/X_Logical_Font_Description&quot;&gt;X Logical Font Description&lt;/a&gt; (XLFD).&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;TODO:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% pkg search terminus-font
terminus-font-4.49.1_1   Terminus Font - a clean fixed width font

% pkg search --regex ^terminus
terminus-font-4.49.1_1   Terminus Font - a clean fixed width font
terminus-ttf-4.49.3      Terminus Font - a clean fixed width font (TTF version)
 
% pkg rquery %dn terminus-font
mkfontscale
fontconfig
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -report-fonts &amp;gt; xterm-report-fonts

% awk &apos;{print $1}&apos; xterm-report-fonts | grep -n &quot;^f[A-Z]&quot;
2:fNorm:
29:fBold:
56:fWide:
83:fWBold:
111:fNorm:
138:fBold:
165:fWide:
192:fWBold:

% sed -n 2p /tmp/xterm-report-fonts 
        fNorm: fixed

% sed -n 29p /tmp/xterm-report-fonts
        fBold: fixed

% sed -n 56p /tmp/xterm-report-fonts
        fWide: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1

% sed -n 83p /tmp/xterm-report-fonts
        fWBold: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1

% sed -n 111p /tmp/xterm-report-fonts
        fNorm: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1

% sed -n 138p /tmp/xterm-report-fonts
        fBold: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1

% sed -n 165p /tmp/xterm-report-fonts
        fWide: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1

% sed -n 192p /tmp/xterm-report-fonts
        fWBold: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;References - HiDPI, WUXGA, Very High Density (140+ PPI) X11 (Xorg) Setup&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://eugene-andrienko.com/it/2025/07/24/x11-configuration-simple.html&quot;&gt;How to configure X11 in a simple way&lt;/a&gt; by Eugene Andrienko
(Posted on 2025-07-24. Retrieved on 2025-08-31.)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://wiki.archlinux.org/title/HiDPI&quot;&gt;HiDPI - ArchWiki&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://linuxreviews.org/HOWTO_set_DPI_in_Xorg&quot;&gt;HOWTO set DPI in Xorg - LinuxReviews&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20241231155337/http://www.wonkity.com/~wblock/docs/pdf/hiresconsole.pdf&quot;&gt;Using X For A High Resolution Console On FreeBSD - By Warren Block (Last updated 2011-05-26)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://unix.stackexchange.com/questions/332316/configure-unreadable-tiny-small-huge-xterm-fonts&quot;&gt;Configure unreadable, tiny, small, …, huge XTerm fonts&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;References - Lenovo ThinkPad T14s Gen 3 (Intel) Specifications, details&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.lenovo.com/ca/en/p/laptops/thinkpad/thinkpadt/thinkpad-t14-gen-3-(14-inch-intel)/len101t0014&quot;&gt;ThinkPad T14 Gen 3 (14” Intel) - Powerful, portable business laptop - Lenovo website&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://psref.lenovo.com/syspool/Sys/PDF/ThinkPad/ThinkPad_T14_Gen_3_Intel/ThinkPad_T14_Gen_3_Intel_Spec.pdf&quot;&gt;Lenovo ThinkPad T14 Gen 3 (Intel) - PSREF (Product Specifications Reference)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.lenovo.com/wp-content/uploads/2022/02/ThinkPad-T14-Gen-3-i-Datasheet.pdf&quot;&gt;Lenovo ThinkPad T14 Gen 3 (Intel) - The Lenovo StoryHub (Note: &lt;em&gt;i&lt;/em&gt; is for Intel)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://nanoreview.net/en/laptop/lenovo-thinkpad-t14s-gen-3-intel?m=c%7e2043.d%7e2.r%7e32&quot;&gt;Lenovo ThinkPad T14s Gen 3 (Intel) - NanoReview&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.productindetail.com/pn/lenovo-thinkpad-t14s-gen-3-21br&quot;&gt;Lenovo ThinkPad T14s Gen 3 (21BR) - full specs, details and review - Product in Detail (www.productindetail.com)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Reference - DPI Calculator / PPI Calculator&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.sven.de/dpi/&quot;&gt;DPI Calculator / PPI Calculator&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the laptop from this post, enter:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Horizontal resolution: 1920 pixels&lt;/li&gt;
  &lt;li&gt;Vertical resolution: 1200 pixels&lt;/li&gt;
  &lt;li&gt;Diagonal: 14 inches (35.56cm)&lt;/li&gt;
  &lt;li&gt;Aspect ratio (it was already prepopulated and was not editable): 16:10&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Result:&lt;/p&gt;

&lt;p&gt;Display size: 11.87” × 7.42” = 88.09in² (30.15cm × 18.85cm = 568.32cm²) at 161.73 PPI (pixels per inch), 0.1571mm &lt;a href=&quot;https://en.wikipedia.org/wiki/Dot_pitch&quot;&gt;dot pitch&lt;/a&gt;, 26155 PPI² (pixels per square inch)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;References - Fractional scaling, font size, DPI (font scaling)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://old.reddit.com/r/thinkpad/comments/wib0t0/best_display_for_t14p14s_gen_3/&quot;&gt;Best display for T14/P14s Gen 3 - About unavialibility of Fractional scaling in X11 under *NIX&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://vermaden.wordpress.com/2018/05/22/freebsd-desktop-part-3-x11-window-system/&quot;&gt;FreeBSD Desktop - Part 3 - X11 Window System - by vermaden&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;References - Some people had issues with T14s’ screen&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://old.reddit.com/r/thinkpad/comments/1n0jhxn/regretting_buying_t14s/&quot;&gt;Regretting Buying T14s&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Got a used T14s gen 1 and am kind of regretting the purchase, mainly because of the screen quality.&lt;/p&gt;

      &lt;p&gt;First few days of using it gave me such eye strain and dizziness, I seriously considered going back to a MacBook, even though I don’t really like the OS. Watching videos are fine but somehow text appears fuzzy, how has this not been mentioned more online?&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;References - Larger XTerm fonts on HiDPI displays, Unicode, Bitmap&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://unix.stackexchange.com/questions/219370/larger-xterm-fonts-on-hidpi-displays&quot;&gt;Larger XTerm fonts on HIDPI displays&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;PS8: vncdesk &lt;a href=&quot;https://github.com/feklee/vncdesk&quot;&gt;https://github.com/feklee/vncdesk&lt;/a&gt; is a good tool to use to scale up a single window:
– &lt;a href=&quot;https://unix.stackexchange.com/questions/192493/how-to-use-xfig-on-high-dpi-screen#202277&quot;&gt;How to use Xfig on high DPI screen?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://forums.freebsd.org/threads/how-to-increase-the-default-font-size.73261/&quot;&gt;How to increase the default font size? - FreeBSD Forums&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://graphicdesign.stackexchange.com/questions/5697/courier-new-like-font-with-unicode-support&quot;&gt;Courier New-like font with Unicode support?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://superuser.com/questions/950794/per-application-window-scaling-in-xorg-for-high-dpi-display&quot;&gt;Per-application window scaling in Xorg for high DPI display&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://invisible-island.net/xterm/&quot;&gt;XTERM - Terminal emulator for the X Window System - Thomas E. Dickey’s software development projects – invisible-island.net&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Thomas Dickey is the maintainer/developer of xterm, the standard terminal emulator for the X Window System.
This page gives some background and pointers to xterm resources.&lt;/p&gt;

      &lt;p&gt;From &lt;a href=&quot;https://invisible-island.net/xterm/xterm.faq.html&quot;&gt;XTerm FAQ&lt;/a&gt;:&lt;/p&gt;

      &lt;p&gt;&lt;strong&gt;What is XTerm?&lt;/strong&gt;&lt;/p&gt;

      &lt;p&gt;From the manual page:&lt;/p&gt;

      &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;The xterm program is a terminal emulator for the X Window System. It provides DEC VT102/VT220 and selected features from higher-level terminals such as VT320/VT420/VT520 (VTxxx). It also provides Tektronix 4014 emulation for programs that cannot use the window system directly. If the underlying operating system supports terminal resizing capabilities (for example, the SIGWINCH signal in systems derived from 4.3bsd), xterm will use the facilities to notify programs running in the window whenever it is resized.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;      &lt;/div&gt;

      &lt;p&gt;That is, xterm (pronounced “&lt;em&gt;eks&lt;/em&gt;-term”) is a &lt;em&gt;specific&lt;/em&gt; program, not a generic item.
It is the &lt;em&gt;standard&lt;/em&gt; X terminal emulator program.&lt;/p&gt;

      &lt;p&gt;[ . . . ]&lt;/p&gt;

      &lt;p&gt;As a stylistic convention, the capitalized form is “&lt;em&gt;XTerm&lt;/em&gt;”, which &lt;em&gt;corresponds&lt;/em&gt; to the &lt;em&gt;X resource class name&lt;/em&gt;.
Similarly, &lt;em&gt;uxterm&lt;/em&gt; becomes “&lt;em&gt;UXTerm&lt;/em&gt;”.&lt;/p&gt;

      &lt;p&gt;&lt;strong&gt;The bold font is ugly&lt;/strong&gt;&lt;/p&gt;

      &lt;p&gt;XTerm lets you directly specify one bold font, which is assumed to correspond to the default font.
Older versions of xterm make a fake bold font for the other choices via the fonts menu by drawing the characters offset by one pixel.
I modified xterm to ask the font server for a bold font that corresponds to each font (other than the default one).
Usually that works well.
However, sometimes the font server gives a poor match.
Xterm checks for differences in the alignment and size, but the font server may give incorrect information about the font size.
The scaled bitmap font feature gives poor results for the smaller fonts.
In your X server configuration file, that can be fixed by disabling the feature, e.g., by appending “:unscaled” to the path:&lt;/p&gt;

      &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;FontPath    &quot;/usr/lib/X11/fonts/100dpi/:unscaled&quot;
FontPath    &quot;/usr/lib/X11/fonts/75dpi/:unscaled&quot;
FontPath    &quot;/usr/lib/X11/fonts/misc/:unscaled&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;      &lt;/div&gt;

      &lt;p&gt;You can suppress xterm’s overstriking for bold fonts using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;alwaysBoldMode&lt;/code&gt; and related resources.
However, rendering ugly bold fonts is a “feature” of the font server.
In particular, the TrueType interface provides less ability to the client for determining if a particular font supports a bold form.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lukas.zapletalovi.com/posts/2013/hidden-gems-of-xterm/&quot;&gt;Hidden gems of XTerm&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;One important note for users with &lt;strong&gt;bitmap fonts&lt;/strong&gt;:
Always select sizes which the fonts are prepared for.
If you don’t stick with this rule, you will end up with slow and ugly resampled fonts which is something you don’t want to see. 
In my case, make sure the sizes match installed fonts (the directory can differ in you distribution - this is Fedora 19):&lt;/p&gt;

      &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;grep medium /usr/share/fonts/terminus/fonts.dir | grep iso10646
ter-x12n.pcf.gz -xos4-terminus-medium-r-normal--12-120-72-72-c-60-iso10646-1
ter-x14n.pcf.gz -xos4-terminus-medium-r-normal--14-140-72-72-c-80-iso10646-1
ter-x16n.pcf.gz -xos4-terminus-medium-r-normal--16-160-72-72-c-80-iso10646-1
ter-x18n.pcf.gz -xos4-terminus-medium-r-normal--18-180-72-72-c-100-iso10646-1
ter-x20n.pcf.gz -xos4-terminus-medium-r-normal--20-200-72-72-c-100-iso10646-1
ter-x22n.pcf.gz -xos4-terminus-medium-r-normal--22-220-72-72-c-110-iso10646-1
ter-x24n.pcf.gz -xos4-terminus-medium-r-normal--24-240-72-72-c-120-iso10646-1
ter-x28n.pcf.gz -xos4-terminus-medium-r-normal--28-280-72-72-c-140-iso10646-1
ter-x32n.pcf.gz -xos4-terminus-medium-r-normal--32-320-72-72-c-160-iso10646-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;      &lt;/div&gt;

      &lt;p&gt;As you can see sizes for the Terminus font are 12, 14, 16, 18, 20, 22, 24, 28 and 32.
Note there are keyboard shortcuts for font size, more about them later on.&lt;/p&gt;

      &lt;p&gt;[ . . . ]&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://openlab.ring.gr.jp/efont/&quot;&gt;Electronic Font Open Laboratory - /efont/&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Distributions&lt;/p&gt;

      &lt;ul&gt;
        &lt;li&gt;efont-unicode-bdf/
The &lt;strong&gt;Bitmap&lt;/strong&gt; Font for Unicode.&lt;/li&gt;
        &lt;li&gt;shinonome-font/
BDF &lt;strong&gt;bitmap&lt;/strong&gt; font by Yasuyuki Furukawa. Contains 12, 14 and 16 dot fonts.&lt;/li&gt;
        &lt;li&gt;efont-japanese-bdf-collection/
The archive which includes Japanese (i.e. JISX0201, 0208 and 0213) and Roman (ISO8859-1) Fonts of some sizes.&lt;/li&gt;
        &lt;li&gt;efont-serif/
The &lt;strong&gt;modifiable&lt;/strong&gt; and &lt;strong&gt;distributable&lt;/strong&gt; outline font which is based on Roman type and Mincho type. We are planning to distribute it in TrueType and CID Type-1 formats.
The development started on November 29, 2000.
Designers and testers are wanted.&lt;/li&gt;
        &lt;li&gt;bdfresize/
 Bdfresize is a command to magnify or reduce fonts which are described with the standard BDF format. The original author Hiroto Kagotani was pleased to hand over its maintenance to the /efont/.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Fixed_(typeface)&quot;&gt;Fixed (typeface) – misc-fixed – a collection of monospace bitmap fonts distributed with the X Window System – Wikipedia&lt;/a&gt;
(Retrieved on Aug 31, 2025.)
    &lt;blockquote&gt;
      &lt;p&gt;&lt;strong&gt;misc-fixed&lt;/strong&gt; is a collection of monospace bitmap fonts that is distributed with the X Window System.
It is a set of independent bitmap fonts which—apart from all being sans-serif fonts—cannot be described as belonging to a single font family.
The misc-fixed fonts were the first fonts available for the X Window System.
Their individual origin is not attributed, but it is likely that many of them were created in the early or mid 1980s as part of MIT’s Project Athena, or at its industrial partner, DEC.
The misc-fixed fonts are in the public domain.&lt;/p&gt;

      &lt;p&gt;The individual fonts in the collection have a short name that matches their respective pixel dimensions, plus a letter that indicates a bold or oblique variant.
They can also be accessed using their (much longer) &lt;em&gt;X Logical Font Description&lt;/em&gt; string:&lt;/p&gt;

      &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;5x7 	-Misc-Fixed-Medium-R-Normal--7-70-75-75-C-50-ISO10646-1
5x8 	-Misc-Fixed-Medium-R-Normal--8-80-75-75-C-50-ISO10646-1
[ . . . ]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;      &lt;/div&gt;

      &lt;p&gt;The “6x13” font is usually also available under the alias “fixed”, a font name that is expected to be available on every X server.&lt;/p&gt;

      &lt;p&gt;The fonts originally covered only the ASCII repertoire, and were in the early 1990s extended to cover all characters in ISO 8859-1.
In 1997, Markus Kuhn initiated and headed a project to extend the misc-fixed fonts to as large a subset of &lt;em&gt;Unicode/ISO 10646&lt;/em&gt; as is feasible for each of the available font sizes
 This project’s goal was to get Linux developers interested in abandoning the 1990s dominant ISO 8859-1 encoding, in favour of using UTF-8 instead, which happened indeed within a few years.&lt;/p&gt;

      &lt;p&gt;[ . . . ]&lt;/p&gt;

      &lt;p&gt;The 6x13, 8x13, 9x15, 9x18, and 10x20 fonts cover a much larger repertoire, that covers in addition the comprehensive CEN MES-3A European Unicode 3.2 subset, the International Phonetic Alphabet, Armenian, Georgian, Thai, Yiddish, all Latin, Greek, and Cyrillic characters, all mathematical symbols (including the entire TeX repertoire), APL, Braille, Runes, and much more. 9x15 and 10x20 also cover Ethiopic.&lt;/p&gt;

      &lt;p&gt;The misc-fixed fonts have been much less commonly used since support for scalable outline font formats such as &lt;em&gt;Type 1&lt;/em&gt;, &lt;em&gt;TrueType&lt;/em&gt; and &lt;em&gt;OpenType&lt;/em&gt; has become available for X.
However, they are still commonly used with terminal emulators, such as &lt;em&gt;XTerm&lt;/em&gt;, and as a fallback font for the many Unicode characters not yet found in common outline fonts.&lt;/p&gt;

      &lt;p&gt;The fonts are distributed in the &lt;em&gt;BDF&lt;/em&gt; format and are currently maintained by Markus Kuhn.&lt;/p&gt;

      &lt;p&gt;[ . . . ]&lt;/p&gt;

      &lt;p&gt;External links&lt;/p&gt;

      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&quot;http://www.chiark.greenend.org.uk/~sgtatham/fonts&quot;&gt;Simon Tatham’s Fonts Page&lt;/a&gt; has, amongst other things, a Windows .FON bitmap font of the “fixed” (i.e. 6x13) font.&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;http://rasher.dk/rockbox/fonts/misc/&quot;&gt;Rasher’s Rockbox related stuff - Fonts - misc&lt;/a&gt; has all sizes of fixed-misc available as images and downloads in a .fnt format.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.gnu.org/software/freefont/&quot;&gt;GNU Free Font’s&lt;/a&gt; Free Mono - Monospace font which is legible and relatively complete in terms of Unicode coverage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;References - The difference between PPI and DPI&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://pixelcalculator.com/en/dpi-vs-ppi-difference.php&quot;&gt;PPI vs. DPI – The Difference Explained Simply&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;PPI: Pixels per Inch - The Digital World&lt;/p&gt;

      &lt;p&gt;DPI: Dots per Inch - The Printed World&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://graphicdesign.stackexchange.com/questions/6080/what-is-the-difference-between-dpi-dots-per-inch-and-ppi-pixels-per-inch&quot;&gt;What is the difference between DPI (dots per inch) and PPI (pixels per inch)?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;References - Miscellaneous&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://eugene-andrienko.com/it/2020/09/26/thinkpad-x220-freebsd.html&quot;&gt;Setting up FreeBSD for Lenovo Thinkpad X220 (2011 year)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://forums.freebsd.org/threads/cannot-change-brightness-on-laptop-freebsd-13-1.87460/&quot;&gt;Cannot change brightness on laptop (FreeBSD 13.1) (Thread Start date: Dec 15, 2022) – FreeBSD Forums&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://forums.freebsd.org/threads/brightness-lxqt-config-brightness-and-gammy.79960/&quot;&gt;Brightness: lxqt-config-brightness and Gammy – FreeBSD Forums&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://futurile.net/2016/06/14/xterm-setup-and-truetype-font-configuration/&quot;&gt;XTerm introduction and TrueType fonts configuration&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://micahelliott.com/posts/2015-07-20-vim-zsh-tmux-cursor.html&quot;&gt;Vi-Mode Ubiquitous Cursor Indicator&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://blog.rot13.org/2010/03/change-font-size-in-xterm-using-keyboard.html&quot;&gt;Change font size in XTerm using keyboard&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.x.org/releases/X11R7.6/doc/xorg-docs/specs/XLFD/xlfd.html&quot;&gt;XLFD (X Logical Font Description) Conventions&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dsl.org/cookbook/cookbook_20.html&quot;&gt;Fonts - The Linux Cookbook, Second Edition, by Michael Stutz&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://superuser.com/questions/465142/how-do-you-know-the-correct-name-to-use-for-x11-fonts-for-xtermfacename-or-xter#comment2564250_1375786&quot;&gt;How do you know the correct name to use for X11 fonts for XTerm*faceName or xterm -fa NAME?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.freedesktop.org/wiki/Software/fontconfig/&quot;&gt;Fontconfig - A library for configuring and customizing font access&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://linux.die.net/HOWTO/Unicode-HOWTO-2.html&quot;&gt;The Unicode HOWTO: Display setup&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://linux.die.net/HOWTO/Unicode-HOWTO.html&quot;&gt;The Unicode HOWTO, Bruno Haible, haible@clisp.cons.org, v1.0, 23 January 2001&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;This document describes how to change your Linux system so it uses UTF-8 as text encoding.
This is work in progress.
Any tips, patches, pointers, URLs are very welcome.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/NanoBillion/gallant&quot;&gt;Gallant Font&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;The 12x22 raster font we love, used by Sun Microsystems SPARC stations. With a ton of Unicode glyphs!&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;footnotes&quot;&gt;Footnotes&lt;/h2&gt;

&lt;p&gt;[1] A &lt;em&gt;monospaced&lt;/em&gt; font, also called a &lt;em&gt;fixed-pitch&lt;/em&gt;, &lt;em&gt;fixed-width&lt;/em&gt;, or &lt;em&gt;non-proportional&lt;/em&gt; font, is a font whose letters and characters each occupy the same amount of &lt;em&gt;horizontal space&lt;/em&gt;.
This contrasts with variable-width fonts, where the letters and spacings have different widths.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;font&lt;/code&gt; resource is a standard resource setting for the &lt;em&gt;X Toolkit&lt;/em&gt;, which deals only with &lt;a href=&quot;https://www.x.org/releases/X11R7.6/doc/xorg-docs/specs/XLFD/xlfd.html&quot;&gt;XLFD (X Logical Font Description) Conventions&lt;/a&gt; bitmap, while &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;faceName&lt;/code&gt; was added long after, in applications such as &lt;em&gt;xterm&lt;/em&gt; to provide a way to specify &lt;strong&gt;TrueType&lt;/strong&gt; fonts (actually whatever &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fontconfig&lt;/code&gt; supports, which &lt;em&gt;can&lt;/em&gt; include &lt;em&gt;bitmap&lt;/em&gt; fonts).&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;From &lt;a href=&quot;https://www.x.org/releases/X11R7.6/doc/xorg-docs/specs/XLFD/xlfd.html&quot;&gt;XLFD (X Logical Font Description) Conventions&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Monospaced = fixed pitch
    &lt;ul&gt;
      &lt;li&gt;A font whose logical character widths are constant (that is, every glyph in the font has the same logical width).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Proportional = variable pitch
    &lt;ul&gt;
      &lt;li&gt;A font whose logical character widths vary for each glyph.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;CharCell
    &lt;ul&gt;
      &lt;li&gt;A monospaced font that follows the standard typewriter character cell model (that is, the glyphs of the font can be modeled by X clients as “boxes” of the same width and height that are imaged side-by-side to form text strings or top-to-bottom to form text lines).
By definition, all glyphs have the same logical character width, and no glyphs have “ink” outside of the character cell.
There is no kerning.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;ul&gt;
  &lt;li&gt;XLFD (bitmap): &lt;a href=&quot;http://linux.die.net/man/1/xlsfonts&quot;&gt;xlsfonts&lt;/a&gt;, &lt;a href=&quot;https://linux.die.net/man/1/xfontsel&quot;&gt;xfontsel&lt;/a&gt;, &lt;a href=&quot;https://linux.die.net/man/1/xfd&quot;&gt;xfd&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.freedesktop.org/wiki/Software/fontconfig/&quot;&gt;fontconfig&lt;/a&gt; (TrueType &lt;em&gt;and&lt;/em&gt; it can support &lt;em&gt;bitmap&lt;/em&gt; fonts too): &lt;a href=&quot;http://linux.die.net/man/1/fc-list&quot;&gt;fc-list&lt;/a&gt;, &lt;a href=&quot;https://linux.die.net/man/1/fc-match&quot;&gt;fc-match&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;From &lt;a href=&quot;https://wiki.archlinux.org/title/X_Logical_Font_Description&quot;&gt;X Logical Font Description (XLFD) - Arch Wiki&lt;/a&gt;:
    &lt;blockquote&gt;
      &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/X_logical_font_description&quot;&gt;X Logical Font Description (XLFD)&lt;/a&gt; is the &lt;em&gt;original&lt;/em&gt; &lt;strong&gt;core&lt;/strong&gt; X11 fonts system.
It was designed for &lt;strong&gt;bitmap&lt;/strong&gt; fonts, and support for &lt;strong&gt;scalable&lt;/strong&gt; fonts (Type 1, TrueType, and OpenType/CFF) was added &lt;em&gt;later&lt;/em&gt;.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;XLFD &lt;em&gt;does not support&lt;/em&gt; anti‑aliasing and sub‑pixel rasterization.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;From &lt;a href=&quot;https://www.x.org/archive/X11R6.8.0/doc/fonts.html&quot;&gt;Fonts in X11R6.8, Juliusz Chroboczek, jch@pps.jussieu.fr, 25 March 2004&lt;/a&gt;, &lt;a href=&quot;https://www.x.org/archive/X11R6.8.0/doc/fonts3.html&quot;&gt;Section 3. Fonts included with X11R6.8&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;Fonts included with X11R6.8&lt;/p&gt;

  &lt;p&gt;3.1. Standard bitmap fonts&lt;/p&gt;

  &lt;p&gt;The Sample Implementation of X11 (SI) comes with a large number of bitmap fonts, including the `fixed’ family, and bitmap versions of Courier, Times, Helvetica and some members of the Lucida family.
In the SI, these fonts are provided in the &lt;strong&gt;ISO 8859-1&lt;/strong&gt; encoding (ISO Latin Western-European).&lt;/p&gt;

  &lt;p&gt;In X11R6.8, a number of these fonts are provided in &lt;em&gt;Unicode-encoded&lt;/em&gt; font files instead.
At build time, these fonts are split into font files encoded according to legacy encodings, a process which allows us to provide the standard fonts in a number of regional encodings with no duplication of work.&lt;/p&gt;

  &lt;p&gt;For example, the font file&lt;/p&gt;

  &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/usr/X11R6/lib/X11/fonts/misc/6x13.bdf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  &lt;/div&gt;

  &lt;p&gt;with XLFD&lt;/p&gt;

  &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  &lt;/div&gt;

  &lt;p&gt;is a Unicode-encoded version of the standard `fixed’ font with added support for the Latin, Greek, Cyrillic, Georgian, Armenian, IPA and other scripts plus numerous technical symbols.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;[2] About XTerm’s Default Font&lt;/p&gt;

&lt;h2 id=&quot;default-font-for-xterm&quot;&gt;Default Font for XTerm&lt;/h2&gt;

&lt;p&gt;With default (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm&lt;/code&gt; started with just &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm&lt;/code&gt;, that is, without using any of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm&lt;/code&gt; options):&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In the new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm&lt;/code&gt; window, run:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xtermcontrol --get-font
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Confirm/check with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm(1)&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -report-fonts | wc -l
     218

% xterm -report-fonts | grep -- &quot;-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1&quot;
     fNorm: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
     fBold: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;As a contrast, next example shows &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm&lt;/code&gt; with a font selected from the FreeType library (new-style font), as opposed to a bitmap (old-style) font (which are specified with XLFD notation).&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -fa mono -fs 12
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In the new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm&lt;/code&gt; window, run:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xtermcontrol --get-font
mono
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ask the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xprop(1)&lt;/code&gt; utility, using its &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-font&lt;/code&gt; argument, to show the properties of the font named &lt;em&gt;fixed&lt;/em&gt;.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xprop -font fixed | grep -w FONT
FONT = -Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO8859-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xprop -font fixed
---- snip ----
FOUNDRY = Misc
FAMILY_NAME = Fixed
WEIGHT_NAME = Medium
SLANT = R
---- snip ----
PIXEL_SIZE = 13
POINT_SIZE = 120
RESOLUTION_X = 75
RESOLUTION_Y = 75
SPACING = C
AVERAGE_WIDTH = 60
CHARSET_REGISTRY = ISO8859
CHARSET_ENCODING = 1
---- snip ----
FONT = -Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO8859-1
---- snip ----
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;From the man page for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm(1)&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;   -fn font
           This option specifies the font to be used for displaying normal
           text.  The corresponding resource name is font.  The resource
           value default is fixed.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Note “The resource value (for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-fn&lt;/code&gt; option) default is &lt;strong&gt;fixed&lt;/strong&gt;”.&lt;/p&gt;

&lt;p&gt;From:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xprop -font fixed
---- snip ----
FONT = -Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO8859-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Also:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -report-fonts | grep &quot;f[A-Z]&quot; | grep -i fixed | wc -l
       8
 
% xterm -report-fonts | grep &quot;f[A-Z]&quot; | wc -l
       8
 
% xterm -report-fonts | grep &quot;f[A-Z]&quot; | grep -i fixed | wc -l
       8
 
% xterm -report-fonts | grep &quot;f[A-Z]&quot; | grep -i fixed
       fNorm: fixed
       fBold: fixed
       fWide: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1
       fWBold: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1
       fNorm: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
       fBold: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
       fWide: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1
       fWBold: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -report-fonts | grep &quot;f[A-Z]&quot; | grep -i fixed | grep -- &quot;-13-120-&quot; | wc -l
       6
 
% xterm -report-fonts | grep &quot;f[A-Z]&quot; | grep -i fixed | grep -- &quot;-13-120-&quot; 
       fWide: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1
       fWBold: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1
       fNorm: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
       fBold: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
       fWide: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1
       fWBold: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;With &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm&lt;/code&gt; use its &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-xrm&lt;/code&gt; option specifies a resource string to be used.&lt;/p&gt;

&lt;p&gt;Here, use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reportFonts&lt;/code&gt; resource.&lt;/p&gt;

&lt;p&gt;From the man page for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm(1)&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;   reportFonts (class ReportFonts)
           If true, xterm will print to the standard output a summary of
           each font&apos;s metrics (size, number of glyphs, etc.), as it loads
           them.  The default is “false”.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -xrm &quot;*reportFonts: true&quot; | wc -l
     218
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -xrm &quot;*reportFonts: true&quot; | grep &quot;f[A-Z]&quot; | wc -l
       8
 
% xterm -xrm &quot;*reportFonts: true&quot; | grep &quot;f[A-Z]&quot; | grep -i fixed | wc -l
       8
 
% xterm -xrm &quot;*reportFonts: true&quot; | grep &quot;f[A-Z]&quot; | grep -i fixed 
        fNorm: fixed
        fBold: fixed
        fWide: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1
        fWBold: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1
        fNorm: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
        fBold: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
        fWide: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1
        fWBold: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;With &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm&lt;/code&gt;, explicitly load font &lt;em&gt;fixed&lt;/em&gt; (which is actually an &lt;em&gt;alias&lt;/em&gt; for the font that is loaded).&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -xrm &quot;*font:fixed&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Next, with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm&lt;/code&gt;, load font &lt;em&gt;fixed&lt;/em&gt; and use the resource string &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reportFonts&lt;/code&gt; to print to the standard output a summary of that font’s metrics (size, number of glyphs, etc.), as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm&lt;/code&gt; loads them.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -xrm &quot;*reportFonts: true&quot; -xrm &quot;*font:fixed&quot; | wc -l
     218
 
% xterm -xrm &quot;*reportFonts: true&quot; -xrm &quot;*font:fixed&quot; | grep &quot;f[A-Z]&quot; | wc -l
       8
 
% xterm -xrm &quot;*reportFonts: true&quot; -xrm &quot;*font:fixed&quot; | grep &quot;f[A-Z]&quot; | grep -i fixed | wc -l
       8
 
% xterm -xrm &quot;*reportFonts: true&quot; -xrm &quot;*font:fixed&quot; | grep &quot;f[A-Z]&quot; | grep -i fixed 
        fNorm: fixed
        fBold: fixed
        fWide: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1
        fWBold: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1
        fNorm: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
        fBold: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
        fWide: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1
        fWBold: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;With the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-report-xres&lt;/code&gt; option for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xterm&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -report-xres | wc -l
     261
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -report-xres | grep -E &quot;font[[:space:]]&quot;
font                    : fixed
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -report-xres | grep -E &quot;font[^[:alnum:]]&quot;
font                    : fixed
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -report-xres | grep -E &quot;font[[:&amp;gt;:]]&quot;
font                    : fixed
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -report-xres
---- snip ----
font                    : fixed
font1                   : nil2
font2                   : 5x7
font3                   : 6x10
font4                   : 7x13
font5                   : 9x15
font6                   : 10x20
font7                   : -adobe-courier-medium-r-normal--24-240-75-75-m-150-iso10646-1
fontDoublesize          : true
fontWarnings            : 1
---- snip ----
utf8                    : default
utf8Fonts               : default
utf8Latin1              : false
---- snip ----
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xset(1)&lt;/code&gt; to find the &lt;em&gt;Font Path&lt;/em&gt;.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xset -q | wc -l
      27

% xset -q | grep -A1 &quot;Font Path&quot;
Font Path:
  /usr/local/share/fonts/ . . . 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% ls -lh /usr/local/share/fonts/ | wc -l
      32
 
% ls -lh /usr/local/share/fonts/misc/ | wc -l
     413
 
% ls /usr/local/share/fonts/misc/fonts*
/usr/local/share/fonts/misc/fonts.alias /usr/local/share/fonts/misc/fonts.scale
/usr/local/share/fonts/misc/fonts.dir
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% grep ^fixed /usr/local/share/fonts/misc/fonts.alias
fixed        -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% grep -- &quot;-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1&quot; /usr/local/share/fonts/misc/fonts.dir 
6x13-ISO8859-1.pcf.gz -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
6x13-ISO8859-10.pcf.gz -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-10
6x13-ISO8859-11.pcf.gz -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-11
6x13-ISO8859-13.pcf.gz -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-13
6x13-ISO8859-14.pcf.gz -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-14
6x13-ISO8859-15.pcf.gz -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-15
6x13-ISO8859-16.pcf.gz -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-16
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% ls /usr/local/share/fonts/misc/6x13-ISO8859-1.pcf.gz                      
/usr/local/share/fonts/misc/6x13-ISO8859-1.pcf.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% mkdir /tmp/6x13check
 
% cd /tmp/6x13check
 
% pwd
/tmp/6x13check
 
% cp -i /usr/local/share/fonts/misc/6x13-ISO8859-1.pcf.gz .
 
% gunzip 6x13-ISO8859-1.pcf.gz
 
% ls
6x13-ISO8859-1.pcf
 
% file 6x13-ISO8859-1.pcf 
6x13-ISO8859-1.pcf: X11 Portable Compiled Font data, bit: MSB, byte: MSB first
 
% wc -l 6x13-ISO8859-1.pcf
      10 6x13-ISO8859-1.pcf
 
% strings 6x13-ISO8859-1.pcf | wc -l
     191

% strings 6x13-ISO8859-1.pcf | grep -i &quot;misc-fixed&quot;
-Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO8859-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts | grep -i -- &quot;-Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO8859-1&quot; | wc -l
      15
 
% xlsfonts | grep -i -- &quot;-Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO8859-1&quot;
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-10
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-10
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-11
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-11
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-13
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-13
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-14
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-14
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-15
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-15
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-16
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-16
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts -fn &quot;-Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO8859-1&quot; | wc -l
       6
 
% xlsfonts -fn &quot;-Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO8859-1&quot;
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts -h
xlsfonts: unrecognized argument -h

usage:  xlsfonts [-options] [-fn pattern]
where options include:
    -l[l[l]]                 give long info about each font
---- snip ----
 
% xlsfonts -l -fn &quot;-Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO8859-1&quot; | wc -l
       7
 
% xlsfonts -ll -fn &quot;-Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO8859-1&quot; | wc -l
     228
 
% xlsfonts -lll -fn &quot;-Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO8859-1&quot; | wc -l
    1770
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;With &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xfontsel(1)&lt;/code&gt; application, to work with only a subset of the fonts, specify &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-pattern&lt;/code&gt; option followed by a partially or fully qualified font name; so &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-pattern &quot;*-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1*&quot;&lt;/code&gt; will select that subset of fonts which contain that string somewhere in their font name.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xfontsel -pattern &quot;*-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1*&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This returned “6  names match”.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xfd -fn &quot;-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1&quot; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;From the man page for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xfd(1)&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;DESCRIPTION
       The xfd utility creates a window containing the name of the font being
       displayed, a row of command buttons, several lines of text for
       displaying character metrics, and a grid containing one glyph per cell.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In this case, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xfd(1)&lt;/code&gt; created a window containing this name of the font displayed:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;-Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO8859-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -fn &quot;-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1&quot; -report-fonts | grep &quot;f[A-Z]&quot;
        fNorm: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
        fBold: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
        fWide: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1
        fWBold: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1
        fNorm: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
        fBold: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
        fWide: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1
        fWBold: -Misc-Fixed-medium-R-*-*-13-120-75-75-C-120-ISO10646-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;app-defaults&quot;&gt;app-defaults&lt;/h2&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% locate &quot;app-defaults&quot; | grep -i xterm
/usr/local/lib/X11/app-defaults/KOI8RXTerm
/usr/local/lib/X11/app-defaults/KOI8RXTerm-color
/usr/local/lib/X11/app-defaults/UXTerm
/usr/local/lib/X11/app-defaults/UXTerm-color
/usr/local/lib/X11/app-defaults/XTerm
/usr/local/lib/X11/app-defaults/XTerm-color
 
% wc -l /usr/local/lib/X11/app-defaults/XTerm
     272 /usr/local/lib/X11/app-defaults/XTerm

% grep -v \! /usr/local/lib/X11/app-defaults/XTerm | wc -l
     149

% grep &quot;font:&quot; /usr/local/lib/X11/app-defaults/XTerm
*SimpleMenu*menuLabel.font: -adobe-helvetica-bold-r-normal--*-120-*-*-*-*-iso8859-*
*VT100.utf8Fonts.font:  -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
 
% grep &quot;font:&quot; /usr/local/lib/X11/app-defaults/XTerm | grep fixed
*VT100.utf8Fonts.font:  -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% grep -i font /usr/local/lib/X11/app-defaults/XTerm | grep -i default
*fontMenu*fontdefault*Label:    Default
! The default fixed font and font2-font6 are commonly aliased to iso106461 (Unicode)
!                                         fontdefault/SmeBSB
!                                         fontdefault/SmeBSB
! xterm can switch at runtime between bitmap (default) and TrueType fonts.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;appres&quot;&gt;appres&lt;/h2&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% sudo pkg install appres
appres-1.0.7    Program to list application&apos;s resources
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% pkg info appres
appres-1.0.7
---- snip ----

Description    :
The appres program prints the resources seen by an application
(or subhierarchy of an application) with the specified class and
instance names.  It can be used to determine which resources a 
particular program will load.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% appres XTerm xterm | wc -l
     175

% appres XTerm xterm
---- snip ----

% appres XTerm xterm | grep &quot;font:&quot;
*SimpleMenu*menuLabel.font:     -adobe-helvetica-bold-r-normal--*-120-*-*-*-*-iso8859-*
*VT100.utf8Fonts.font:  -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1

% appres XTerm xterm | grep &quot;font:&quot; | grep fixed
*VT100.utf8Fonts.font:  -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;find-xterm-fonts-perl-script&quot;&gt;find-xterm-fonts Perl script&lt;/h2&gt;

&lt;p&gt;Using &lt;em&gt;find-xterm-fonts&lt;/em&gt; Perl script from the maintainer of XTerm, Thomas E. Dickey:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% fetch https://invisible-island.net/datafiles/release/misc-scripts.tar.gz

% tar xf misc-scripts.tar.gz
 
% ls
misc-scripts-20250722   misc-scripts.tar.gz

% cd misc-scripts-20250722/

% ls
CHANGES                         MANIFEST
check-manpage                   nm_cmp
classpath                       no-local
compare-terminfo                nodot
count-nroff                     noenv
diffstat2css                    nolocale
find-xterm-fonts                noterm
---- snip ----

% file find-xterm-fonts
find-xterm-fonts: Perl script text executable

% ./find-xterm-fonts
# opening /usr/local/lib/X11/app-defaults/XTerm
---- snip ----
        *VT100.utf8Fonts.font:  -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
---- snip ----
# opening /usr/local/lib/X11/app-defaults/UXTerm
        *VT100.font:    -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
---- snip ----
# opening /usr/local/lib/X11/app-defaults/KOI8RXTerm
        *VT100.font:    -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-koi8-r
---- snip ---- 

Font-files used:
---- snip ----
        /usr/local/share/fonts/misc/6x13.pcf.gz
        -&amp;gt; UXTerm*VT100.font
        -&amp;gt; XTerm*VT100.utf8Fonts.font
---- snip ----

No font-files missing

Packages providing font-files:

font-adobe-75dpi-1.0.3_4
        /usr/local/share/fonts/75dpi/courR24.pcf.gz
        /usr/local/share/fonts/75dpi/helvB12-ISO8859-1.pcf.gz
font-misc-misc-1.1.2_4
        /usr/local/share/fonts/misc/10x20-ISO8859-1.pcf.gz
        /usr/local/share/fonts/misc/10x20-KOI8-R.pcf.gz
        /usr/local/share/fonts/misc/10x20.pcf.gz
        /usr/local/share/fonts/misc/5x7-ISO8859-1.pcf.gz
        /usr/local/share/fonts/misc/5x8-KOI8-R.pcf.gz
        /usr/local/share/fonts/misc/5x8.pcf.gz
        /usr/local/share/fonts/misc/6x10-ISO8859-1.pcf.gz
        /usr/local/share/fonts/misc/6x13-ISO8859-1.pcf.gz
        /usr/local/share/fonts/misc/6x13-KOI8-R.pcf.gz
        /usr/local/share/fonts/misc/6x13.pcf.gz
        /usr/local/share/fonts/misc/7x13-ISO8859-1.pcf.gz
        /usr/local/share/fonts/misc/7x14-KOI8-R.pcf.gz
        /usr/local/share/fonts/misc/7x14.pcf.gz
        /usr/local/share/fonts/misc/8x13-ISO8859-1.pcf.gz
        /usr/local/share/fonts/misc/8x13-KOI8-R.pcf.gz
        /usr/local/share/fonts/misc/8x13.pcf.gz
        /usr/local/share/fonts/misc/9x15-ISO8859-1.pcf.gz
        /usr/local/share/fonts/misc/9x18-KOI8-R.pcf.gz
        /usr/local/share/fonts/misc/9x18.pcf.gz
        /usr/local/share/fonts/misc/nil2.pcf.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;appendix&quot;&gt;Appendix&lt;/h1&gt;

&lt;h2 id=&quot;useful-commands-and-examples-for-exploring-hardware&quot;&gt;Useful Commands and Examples for Exploring Hardware&lt;/h2&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% sudo dmidecode | wc -l
     975

% sudo dmidecode | grep &quot;Version: ThinkPad&quot;
      Version: ThinkPad T14s Gen 3

% sudo dmidecode | grep &quot;SKU Number: LENOVO&quot;
      SKU Number: LENOVO_MT_21BR_BU_Think_FM_ThinkPad T14s Gen 3

% sudo dmidecode | sed -n 608,616p
System Information
      Manufacturer: LENOVO
      Product Name: 21BR000NUS
      Version: ThinkPad T14s Gen 3
      Serial Number: [redacted]
      UUID: [redacted]
      Wake-up Type: Power Switch
      SKU Number: LENOVO_MT_21BR_BU_Think_FM_ThinkPad T14s Gen 3
      Family: ThinkPad T14s Gen 3

% sudo dmidecode | grep Intel | grep Version
      Version: 12th Gen Intel(R) Core(TM) i7-1280P

% sudo dmidecode | sed -n 517,521p
Processor Information
      Socket Designation: U3E1
      Type: Central Processor
      Family: Core i7
      Manufacturer: Intel(R) Corporation

% sudo dmidecode | grep i7 | grep Version
        Version: 12th Gen Intel(R) Core(TM) i7-1280P
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% sysctl hw.physmem
hw.physmem: 34007212032

% printf %s\\n &quot;34359738368 / 1024 / 1024&quot; | bc
32768
 
% printf %s\\n &quot;34359738368 / 1024 / 1024 / 1024&quot; | bc
32
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% dmesg | grep &quot;real memory&quot;
real memory  = 34359738368 (32768 MB)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% pciconf -lv | grep -B3 display
vgapci0@pci0:0:2:0:	class=0x030000 rev=0x0c hdr=0x00 vendor=0x8086 device=0x46a6 subvendor=0x17aa subdevice=0x22ee
    vendor     = &apos;Intel Corporation&apos;
    device     = &apos;Alder Lake-P GT2 [Iris Xe Graphics]&apos;
    class      = display
 
% xdpyinfo | grep &quot;number of screens&quot;
number of screens:    1

% xdpyinfo | grep -B2 resolution
screen #0:
  dimensions:    1920x1200 pixels (294x184 millimeters)
  resolution:    166x166 dots per inch
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% ls /dev/backlight/
backlight0              intel_backlight0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;useful-tools-for-using-and-exploring-fonts&quot;&gt;Useful Tools for Using and Exploring Fonts&lt;/h2&gt;

&lt;h3 id=&quot;x-tools-for-x-core-fonts---for-xlfd-aka-bitmapped-fonts---xlsfonts-xfontsel-xfd&quot;&gt;X Tools for X Core Fonts - For XLFD (aka: Bitmapped fonts) - xlsfonts, xfontsel, xfd&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;XLFD&lt;/strong&gt;: &lt;em&gt;X Logical Font Description&lt;/em&gt;  (as opposed to &lt;em&gt;Fontconfig&lt;/em&gt; and &lt;em&gt;FreeType&lt;/em&gt; libraries).&lt;/p&gt;

&lt;p&gt;If on your FreeBSD system these three packages (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xfontsel&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xlsfonts&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xfd&lt;/code&gt;) were not installed when you installed the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X&lt;/code&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xorg&lt;/code&gt;) metaport and other &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X&lt;/code&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xorg&lt;/code&gt;) -related metaports and ports, you’ll need to install them.&lt;/p&gt;

&lt;p&gt;To list &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X&lt;/code&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xorg&lt;/code&gt;) and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X&lt;/code&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xorg&lt;/code&gt;) -related metaports and ports:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% pkg info | grep ^xorg-
xorg-7.7_3                   X.Org complete distribution metaport
xorg-apps-7.7_4              X.org apps meta-port
xorg-docs-1.7.3,1            X.org documentation files
xorg-drivers-7.7_7           X.org drivers meta-port
xorg-fonts-7.7_1             X.org fonts meta-port
xorg-fonts-100dpi-7.7        X.Org 100dpi bitmap fonts
xorg-fonts-75dpi-7.7         X.Org 75dpi bitmap fonts
xorg-fonts-cyrillic-7.7      X.Org Cyrillic bitmap fonts
xorg-fonts-miscbitmaps-7.7   X.Org miscellaneous bitmap fonts
xorg-fonts-truetype-7.7_1    X.Org TrueType fonts
xorg-fonts-type1-7.7         X.Org Type1 fonts
xorg-libraries-7.7_6         X.org libraries meta-port
xorg-server-21.1.18,1        X.Org X server and related programs
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;On my system they were not installed so I had to install them.&lt;/p&gt;

&lt;h3 id=&quot;xlsfonts&quot;&gt;xlsfonts&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% pkg search xlsfonts
xlsfonts-1.0.8    Server font list displayer for X

% sudo pkg install xlsfonts
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts -h
xlsfonts: unrecognized argument -h

usage:  xlsfonts [-options] [-fn pattern]
where options include:
 -l[l[l]]             give long info about each font
 -m                   give character min and max bounds
 -C                   force columns
 -1                   force single column
 -u                   keep output unsorted
 -o                   use OpenFont/QueryFont instead of ListFonts
 -w width             maximum width for multiple columns
 -n columns           number of columns if multi column
 -display displayname X server to contact
 -d displayname       (alias for -display displayname)
 -v                   print program version
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;NOTE: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xlsfonts(1)&lt;/code&gt; deals only with &lt;strong&gt;XLFD&lt;/strong&gt; &lt;em&gt;14-part&lt;/em&gt; names.&lt;/p&gt;

&lt;p&gt;Chapter &lt;em&gt;Fonts&lt;/em&gt; of &lt;em&gt;The Linux Cookbook&lt;/em&gt; (Second Edition, by Michael Stutz) has a table describing the meaning of each field of X font names in &lt;strong&gt;XLFD&lt;/strong&gt; (&lt;em&gt;X Logical Font Description&lt;/em&gt;):&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://dsl.org/cookbook/cookbook_20.html#SEC313&quot;&gt;X Fonts - The Linux Cookbook, Second Edition, by Michael Stutz&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts | wc -l
   23232

% xlsfonts &quot;*&quot; | wc -l
   23232
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;When the searched font doesn’t exist on the system:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts &quot;mono&quot;
xlsfonts: pattern &quot;mono&quot; unmatched
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;When there is a match for the given pattern:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts &quot;*mono*&quot; | wc -l
    6962

% xlsfonts &quot;*mono*&quot; | head
-adobe-noto sans mono cjk jp-bold-r-normal--0-0-0-0-p-0-ascii-0
-adobe-noto sans mono cjk jp-bold-r-normal--0-0-0-0-p-0-cns11643-1
-adobe-noto sans mono cjk jp-bold-r-normal--0-0-0-0-p-0-cns11643-2
-adobe-noto sans mono cjk jp-bold-r-normal--0-0-0-0-p-0-cns11643-3
-adobe-noto sans mono cjk jp-bold-r-normal--0-0-0-0-p-0-gb18030.2000-0
-adobe-noto sans mono cjk jp-bold-r-normal--0-0-0-0-p-0-gb2312.1980-0
-adobe-noto sans mono cjk jp-bold-r-normal--0-0-0-0-p-0-iso10646-1
-adobe-noto sans mono cjk jp-bold-r-normal--0-0-0-0-p-0-iso8859-1
-adobe-noto sans mono cjk jp-bold-r-normal--0-0-0-0-p-0-jisx0201.1976-0
-adobe-noto sans mono cjk jp-bold-r-normal--0-0-0-0-p-0-jisx0208.1983-0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;It’s &lt;em&gt;case insensitive&lt;/em&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts -fn &quot;*fixed*&quot; | wc -l
    1014
 
% xlsfonts -fn &quot;*Fixed*&quot; | wc -l
    1014
 
% xlsfonts -fn &quot;*FIXED*&quot; | wc -l
    1014
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts | wc -l
   23232

% xlsfonts | grep -i monospaced | wc -l
       0
 
% xlsfonts | grep -i monospace | wc -l
       0

% xlsfonts | grep -i fixed | wc -l
    1014
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;When searched for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Fixed_(typeface)&quot;&gt;Fixed (typeface) - aka &lt;strong&gt;misc-fixed&lt;/strong&gt;&lt;/a&gt; fonts:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts -fn &quot;*fixed*&quot; | grep -i misc | wc -l
     970
 
% xlsfonts -fn &quot;*fixed*&quot; | grep -v misc | wc -l
      44
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts -fn &quot;*misc-fixed*&quot; | wc -l
     970
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts -fn &quot;*misc-fixed*&quot; | grep -i &quot;\-Misc\-Fixed\-Medium\-R\-Normal\-\-7\-70\-75\-75\-C\-50\-ISO10646\-1&quot;
-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso10646-1
-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso10646-1
 
% xlsfonts -fn &quot;*misc-fixed*&quot; | grep -n -i &quot;\-Misc\-Fixed\-Medium\-R\-Normal\-\-7\-70\-75\-75\-C\-50\-ISO10646\-1&quot;
758:-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso10646-1
759:-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso10646-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts -fn &quot;*misc-fixed*&quot; | grep -i -- &quot;-Misc-Fixed-Medium-R-Normal--7-70-75-75-C-50-ISO10646-1&quot;
-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso10646-1
-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso10646-1

% xlsfonts -fn &quot;*misc-fixed*&quot; | grep -n -i -- &quot;-Misc-Fixed-Medium-R-Normal--7-70-75-75-C-50-ISO10646-1&quot;
758:-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso10646-1
759:-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso10646-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts -fn &quot;*-Misc-Fixed-Medium-R-Normal--7-70-75-75-C-50-ISO10646-1*&quot;
-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso10646-1
-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso10646-1
-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso10646-1
-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso10646-1
-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso10646-1
-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso10646-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You don’t have to use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-fn&lt;/code&gt; option:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts &quot;*-Misc-Fixed-Medium-R-Normal--7-70-75-75-C-50-ISO10646-1*&quot;
-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso10646-1
-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso10646-1
-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso10646-1
-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso10646-1
-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso10646-1
-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso10646-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts &quot;*misc-fixed*&quot; | grep -n -i &quot;\-Misc\-Fixed\-Medium\-R\-Normal\-\-7\-70\-75\-75\-C\-50\-ISO10646\-1&quot;
758:-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso10646-1
759:-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso10646-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;xfontsel&quot;&gt;xfontsel&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% pkg search --regex ^xfontsel
xfontsel-1.1.1    Point and click selection of X11 font names
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ pkg search --regex --full ^xfontsel | sed -n &apos;/Description/,$p&apos;
Description    :
This package contains xfontsel, an application which provides a simple way to
display fonts known to your X server.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% sudo pkg install xfontsel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xfontsel -help
usage:  xfontsel [-options ...] -fn font

where options include:
    -display dpy           X server to contact
    -geometry geom         size and location of window
    -pattern fontspec      font name pattern to match against
    -print                 print selected font name on exit
    -sample string         sample text to use for 1-byte fonts
    -sample16 string       sample text to use for 2-byte fonts
    -sampleUCS string      sample text to use for ISO10646 fonts
    -scaled                use scaled instances of fonts
plus any standard toolkit options
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;NOTE: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xfontsel(1)&lt;/code&gt; deals only with &lt;strong&gt;XLFD&lt;/strong&gt; &lt;em&gt;14-part&lt;/em&gt; names.&lt;/p&gt;

&lt;p&gt;To work with only a &lt;em&gt;subset&lt;/em&gt; of the fonts, specify &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-pattern&lt;/code&gt; option followed by a partially or fully qualified font name; e.g., &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-pattern &quot;*medium*&quot;&lt;/code&gt; will select that subset of fonts which contain the string &lt;em&gt;medium&lt;/em&gt; somewhere in their font name.&lt;/p&gt;

&lt;p&gt;When the searched font doesn’t exist on the system:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ xfontsel -fn nonexistingfont
Warning: Cannot convert string &quot;nonexistingfont&quot; to type FontStruct
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ xfontsel -fn mono
Warning: Cannot convert string &quot;mono&quot; to type FontStruct
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xfontsel -pattern &apos;mono&apos; -print

#  The  xfontsel(1)  window displayed:
#    no names match
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xfontsel -pattern &apos;*mono*&apos; -print
        
#  On my system, the  xfontsel(1)  window displayed:
#    12 names match

#  After quitting xfontsel(1):
-*-b612 mono-*-*-*-*-*-*-*-*-*-*-*-*$ 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;xfd&quot;&gt;xfd&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% sudo pkg install xfd 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% pkg info xfd
---- snip ----
Comment        : Display all characters in an X font
---- snip ----
Description    :
This package contains xfd, an applications used for displying all
characters in an X font.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;NOTE: In addition to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-fn&lt;/code&gt; option (which specifies the &lt;em&gt;core X&lt;/em&gt; server side font to be displayed), the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xfd(1)&lt;/code&gt; utility &lt;em&gt;also supports&lt;/em&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-fa&lt;/code&gt; option (which specifies an &lt;em&gt;Xft&lt;/em&gt; font to be displayed).&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xfd -fa gallant

#   xfd(1) loaded Noto Sans-12:style=Regular
#   WHY?
#   This is why:

% fc-match
NotoSans-Regular.ttf: &quot;Noto Sans&quot; &quot;Regular&quot;

% fc-match gallant
NotoSans-Regular.ttf: &quot;Noto Sans&quot; &quot;Regular&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xfd -fn fixed
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Loaded:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;-Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO8859-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xfontsel -print -fn &quot;-Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO8859-1&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Output:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;-*-*-*-*-*-*-*-*-*-*-*-*-*-*% 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xfontsel -print -fn fixed
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Output:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;-*-*-*-*-*-*-*-*-*-*-*-*-*-*% 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;fontconfig-tools-fc-list-fc-match-fc-conflist---for-opentype-truetype-fonts&quot;&gt;Fontconfig Tools (fc-list, fc-match, fc-conflist) - For OpenType, TrueType Fonts&lt;/h3&gt;

&lt;p&gt;Print a list of all the configuration files processed by &lt;em&gt;Fontconfig&lt;/em&gt;.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% fc-conflist 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The output is a ‘-‘ or ‘+’ depending on whether the file is ignored or processed, a space, the file’s path, a colon and space, and the description from the file or ‘No description’ if none is present.&lt;/p&gt;

&lt;p&gt;The order of files looks like how &lt;em&gt;fontconfig&lt;/em&gt; actually processes them except one containing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;include&amp;gt;&lt;/code&gt; element.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% fc-list | wc -l
    1895

% sudo pkg install xscreensaver

% fc-list | wc -l
    1900

% fc-list | grep -i gallant
/usr/local/share/fonts/xscreensaver/gallant12x22.ttf: gallant12x22:style=Medium

% xfd -fa gallant12x22

#   xfd(1) loaded the correct font, that is:
#     gallant12x22-12:style=Medium

% xfd -fn gallant12x22
Warning: Cannot convert string &quot;gallant12x22&quot; to type FontStruct
xfd:  no font to display
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% fc-list | wc -l
    1895

% fc-list :scalable=true:spacing=mono:family | wc -l
     175

% fc-list :scalable=true:spacing=mono:family | less
---- snip ----

% fc-list :scalable=true:spacing=mono:family | grep mono | wc -l
      60

% fc-list :scalable=true:spacing=mono:family | grep mono | less
---- snip ----
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% fc-match | wc -l
       1

% fc-match
NotoSans-Regular.ttf: &quot;Noto Sans&quot; &quot;Regular&quot;

% fc-match SomeFont
NotoSans-Regular.ttf: &quot;Noto Sans&quot; &quot;Regular&quot;
 
% fc-match &quot;Some Font&quot;
NotoSans-Regular.ttf: &quot;Noto Sans&quot; &quot;Regular&quot;

% fc-match 0xProto
0xProto-Regular.otf: &quot;0xProto&quot; &quot;Regular&quot;
 
% fc-match 0xPROTO
0xProto-Regular.otf: &quot;0xProto&quot; &quot;Regular&quot;

% fc-match &apos;*0xProto*&apos;
NotoSans-Regular.ttf: &quot;Noto Sans&quot; &quot;Regular&quot;
 
% fc-match &quot;*0xProto*&quot;
NotoSans-Regular.ttf: &quot;Noto Sans&quot; &quot;Regular&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% fc-list | grep 0xProto
/home/dusko/.fonts/0xProto-Regular.otf: 0xProto:style=Regular
/home/dusko/.fonts/0xProto-Regular.ttf: 0xProto:style=Regular

% find ~/.fonts -iname &apos;*0xProto*&apos;
/home/dusko/.fonts/0xProto-Regular.otf
/home/dusko/.fonts/0xProto-Regular.ttf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% fc-list | grep -i 0xProto
/home/dusko/.fonts/0xProto-Regular.otf: 0xProto:style=Regular
/home/dusko/.fonts/0xProto-Regular.ttf: 0xProto:style=Regular

% fc-list -v 0xProto | grep -i file
        file: &quot;/home/dusko/.fonts/0xProto-Regular.ttf&quot;(s)
        file: &quot;/home/dusko/.fonts/0xProto-Regular.otf&quot;(s)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;To get detailed information about a font; for example, about 0xProto font:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% fc-list -v 0xProto | wc -l
      88
 
% fc-list -v 0xProto | grep postscriptname
        postscriptname: &quot;0xProto-Regular&quot;(s)
        postscriptname: &quot;0xProto-Regular&quot;(s)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% fc-match
NotoSans-Regular.ttf: &quot;Noto Sans&quot; &quot;Regular&quot;
 
% fc-list | grep &quot;NotoSans-Regular.ttf&quot;
/usr/local/share/fonts/noto/NotoSans-Regular.ttf: Noto Sans:style=Regular

% find /usr/local/share/fonts -iname &apos;*Noto*&apos; | wc -l
     366

% find /usr/local/share/fonts -iname &apos;*Noto*&apos; 
/usr/local/share/fonts/noto
/usr/local/share/fonts/noto/NotoSerifDisplay-BlackItalic.ttf
/usr/local/share/fonts/noto/NotoSerifCJKsc-ExtraLight.otf
---- snip ----
/usr/local/share/fonts/noto/NotoSans-BoldItalic.ttf
/usr/local/share/fonts/noto/NotoSans-SemiCondensedExtraLightItalic.ttf
/usr/local/share/fonts/noto/NotoSans-BlackItalic.ttf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;additional-fontconfig-tools&quot;&gt;Additional Fontconfig Tools&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% man fonts-conf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;fc-cache(1) fc-list(1) fc-match(1) fc-pattern(1) fc-query(1) fc-scan(1) fc-cat(1)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;useful-x-tools---generic-general&quot;&gt;Useful X Tools - Generic, General&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;To display the start of the cut buffer: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xprop -root -len 100 CUT_BUFFER0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;glossary--acronyms--terms-todo&quot;&gt;Glossary / Acronyms / Terms [TODO]&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;(Often used interchangeably) X.Org Server - X - X11 - Xorg: X.Org Foundation implementation of the X Window System (X11) display server
    &lt;ul&gt;
      &lt;li&gt;So, X.Org Server (X): &lt;em&gt;implementation&lt;/em&gt; of the &lt;em&gt;X Window System&lt;/em&gt; (X11) &lt;em&gt;display server&lt;/em&gt;
        &lt;ul&gt;
          &lt;li&gt;X Window System = X11&lt;/li&gt;
          &lt;li&gt;X11 = protocol, the core protocol&lt;/li&gt;
          &lt;li&gt;X.Org Server = X&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;references-1&quot;&gt;References:&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/X_Window_System&quot;&gt;X Window System - Wikipedia&lt;/a&gt;:
    &lt;blockquote&gt;
      &lt;p&gt;X Window System (X11, or simply X) is a windowing system for bitmap displays, common on Unix-like operating systems.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Windowing_system&quot;&gt;Windowing system - Wikipedia&lt;/a&gt;:
    &lt;blockquote&gt;
      &lt;p&gt;The X Window System was first released in 1984 and is historically the main windowing system for Unix and Unix-like operating systems.
The &lt;strong&gt;core protocol&lt;/strong&gt; has been at &lt;strong&gt;version 11&lt;/strong&gt; since &lt;strong&gt;1987&lt;/strong&gt;, hence it commonly being known as “X11”.
The current reference implementation of the X11 protocol is the X.Org Server, which provides the display server and some ancillary components.&lt;/p&gt;

      &lt;p&gt;[ . . . ]&lt;/p&gt;

      &lt;p&gt;The &lt;em&gt;main&lt;/em&gt; component of any windowing system is usually called the &lt;em&gt;display server&lt;/em&gt;, although alternative terms such as &lt;em&gt;window server&lt;/em&gt; are also in use.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://wiki.archlinux.org/title/Xorg&quot;&gt;Xorg - Arch Wiki&lt;/a&gt;
    &lt;blockquote&gt;
      &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/X.Org_Server&quot;&gt;X.Org Server&lt;/a&gt; - commonly referred to as simply &lt;strong&gt;X&lt;/strong&gt; - is the &lt;a href=&quot;https://en.wikipedia.org/wiki/X.Org_Foundation&quot;&gt;X.Org Foundation&lt;/a&gt; implementation of the &lt;a href=&quot;https://en.wikipedia.org/wiki/X_Window_System&quot;&gt;X Window System&lt;/a&gt; (&lt;strong&gt;X11&lt;/strong&gt;) display server, and it is the most popular display server among Linux users.&lt;/p&gt;

      &lt;p&gt;For the alternative and successor, see &lt;a href=&quot;https://wiki.archlinux.org/title/Wayland&quot;&gt;Wayland&lt;/a&gt;.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;XLFD = X Logical Font Description&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Type 1, TrueType, OpenType/CFF = scalable fonts&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;faq&quot;&gt;FAQ&lt;/h1&gt;

&lt;h2 id=&quot;how-do-misc-fixed-fonts-look-like&quot;&gt;How do &lt;em&gt;misc-fixed&lt;/em&gt; fonts look like?&lt;/h2&gt;

&lt;p&gt;Answer: On my FreeBSD 14 system:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xfontsel -print
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;For &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fndry&lt;/code&gt; select &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;misc&lt;/code&gt;.
For &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fmly&lt;/code&gt; select &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fixed&lt;/code&gt;.
Click ‘quit’.&lt;/p&gt;

&lt;p&gt;Output:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;-misc-fixed-*-*-*-*-*-*-*-*-*-*-*-*%
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts | wc -l
   23234

% xlsfonts &quot;*-misc-fixed*&quot; | wc -l
     970
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;On my system, there are 970 fonts in the &lt;em&gt;misc-fixed&lt;/em&gt; collection of fonts.&lt;/p&gt;

&lt;p&gt;Now, you can dig deeper, and start filtering out, until you find a font or a set of fonts that you like.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xlsfonts &quot;*-misc-fixed*&quot; | less

% xlsfonts &quot;*-misc-fixed-medium-r-normal*&quot; | wc -l
     454

% xlsfonts &quot;*-misc-fixed-medium-r-normal*&quot; | less

% xlsfonts &quot;*-misc-fixed-medium-r-normal--20*&quot; | wc -l
      34
 
% xlsfonts &quot;*-misc-fixed-medium-r-normal--20*&quot; | less
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xfontsel -pattern &quot;-misc-fixed-medium-r-normal--20-200-75-75-c-100-iso10646-1&quot; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Returned “6  names match”.&lt;/p&gt;

&lt;p&gt;Then with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xfd(1)&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xfd -fn &quot;-misc-fixed-medium-r-normal--20-200-75-75-c-100-iso10646-1&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Similarly:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xfd -fn &quot;*-misc-fixed-medium-r-normal--20-*&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;will display:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;-Misc-Fixed-Medium-R-Normal--20-200-75-75-C-100-ISO8859-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xfd -fn &quot;-misc-fixed-medium-r-normal--*-*-*-*-*-*-iso10646-1&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;will display:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;-Misc-Fixed-Medium-R-Normal--20-200-75-75-C-100-ISO10646-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xterm -fn &quot;-Misc-Fixed-Medium-R-Normal--20-200-75-75-C-100-ISO10646-1&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;To display the point size of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fixed&lt;/code&gt; font being used:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% xprop -font fixed POINT_SIZE
POINT_SIZE = 120
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;!--
  -- TODO:
  -- 
  -- ChatGPT chat
  -- https://unix4lyfe.org/xterm/
  -- https://wiki.archlinux.org/title/Fonts
  -- https://www.jeffquast.com/post/terminal_wcwidth_solution/
  -- https://iamvishnu.com/posts/utf8-is-brilliant-design
  -- http://docsrv.sco.com/en/GECG/X_Font_ProcListXsrv.html 
  -- https://www.designmatrix.com/services/XResources_fonts.html
  -- http://docsrv.sco.com/en/GECG/X_Font_ProcListXsrv.html 
  -- https://stackoverflow.com/questions/17078247/linux-c-xft-how-to-use-it
  -- https://ia801601.us.archive.org/22/items/xwindowsystem03quermiss/xwindowsystem03quermiss.pdf 
  -- https://forums.freebsd.org/threads/pleasant-fonts.84570/
  -- https://askubuntu.com/questions/161652/how-to-change-the-default-font-size-of-xterm?rq=1
  -- https://unix.stackexchange.com/questions/675000/scaling-default-xterm-font-to-large 
  -- https://old.reddit.com/r/chrome/comments/6fbeh4/is_it_possible_to_use_bitmap_fonts_in_chrome/ 
  -- https://www.x.org/archive/X11R6.8.0/doc/fonts3.html
  -- [FAQ: Fonts - University of Utah - Mathematics Department](https://www.math.utah.edu/faq/fonts/fonts.html) 
  -- https://stackoverflow.com/questions/59889366/identify-xterm-fonts-being-used-and-corresponding-cygwin-package 
  --&gt;

&lt;hr /&gt;

</description>
        <pubDate>Sun, 31 Aug 2025 19:38:13 +0000</pubDate>
        <link>https://duskopijetlovic.github.io/x11/xorg/xterm/config/dotfiles/howto/font/freebsd/utf8/unicode/unix/cli/terminal/shell/tip/2025/08/31/freebsd-x11-xorg-simple-setup-notes.html</link>
        <guid isPermaLink="true">https://duskopijetlovic.github.io/x11/xorg/xterm/config/dotfiles/howto/font/freebsd/utf8/unicode/unix/cli/terminal/shell/tip/2025/08/31/freebsd-x11-xorg-simple-setup-notes.html</guid>
        
        
        <category>x11</category>
        
        <category>xorg</category>
        
        <category>xterm</category>
        
        <category>config</category>
        
        <category>dotfiles</category>
        
        <category>howto</category>
        
        <category>font</category>
        
        <category>freebsd</category>
        
        <category>utf8</category>
        
        <category>unicode</category>
        
        <category>unix</category>
        
        <category>cli</category>
        
        <category>terminal</category>
        
        <category>shell</category>
        
        <category>tip</category>
        
      </item>
    
      <item>
        <title>DevOps for the Desparate with FreeBSD [WIP]</title>
        <description>&lt;ul&gt;
  &lt;li&gt;Stop bhyve from loading&lt;/li&gt;
  &lt;li&gt;On FreeBSD 14.x: Package &lt;em&gt;vagrant&lt;/em&gt; not working - &lt;a href=&quot;https://developer.hashicorp.com/vagrant/docs/installation/source&quot;&gt;Install Vagrant from source&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vagrant mutate bhyve&lt;/code&gt; not working - use vagrant with &lt;em&gt;VirtualBox&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://forums.freebsd.org/threads/virtualbox-ose-6-1-5-fails-to-start-any-type-of-guest-vm-in-14-1-release.95776/&quot;&gt;[Solved] Virtualbox-ose-6.1.5 fails to start any type of guest VM in 14.1 release&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;added &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vboxdrv_load=&quot;YES&quot;&lt;/code&gt; line to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/boot/loader.conf&lt;/code&gt;&lt;/p&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Did you also load the module or rebooted the system?
It’s not dynamic, the modules in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/boot/loader.conf&lt;/code&gt; are only loaded when the system boots.&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;the issue was vmm loading up as well due to the vm_dir line being in /etc/rc.conf&lt;/p&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Right. &lt;a href=&quot;https://www.freshports.org/sysutils/vm-bhyve&quot;&gt;&lt;em&gt;sysutils/vm-bhyve&lt;/em&gt;&lt;/a&gt; automatically loads it if it’s enabled.
Unfortunately the two virtualization layers don’t play nice with each other.&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;
</description>
        <pubDate>Wed, 09 Apr 2025 03:13:06 +0000</pubDate>
        <link>https://duskopijetlovic.github.io/devops/freebsd/sysadmin/2025/04/09/freebsd-devops-for-the-desparate.html</link>
        <guid isPermaLink="true">https://duskopijetlovic.github.io/devops/freebsd/sysadmin/2025/04/09/freebsd-devops-for-the-desparate.html</guid>
        
        
        <category>devops</category>
        
        <category>freebsd</category>
        
        <category>sysadmin</category>
        
      </item>
    
  </channel>
</rss>
