Jump to content

Xorg: Difference between revisions

From NixOS Wiki
imported>Cas1no
No edit summary
Malix (talk | contribs)
m See also: feat: reference link to wayland
 
(12 intermediate revisions by 7 users not shown)
Line 1: Line 1:
[https://en.wikipedia.org/wiki/X.Org_Server Xorg] is the implementation of the [https://en.wikipedia.org/wiki/X_Window_System X Window System]. It acts as the bridge between your system's hardware and the graphical user environment enabling a variety of [[:Category:Desktop environment|desktop environments]] and [[:Category:Window managers|window managers]].
= Enabling =
On NixOS, users can enable and configure Xorg through the {{nixos:option|services.xserver}} module in their system configuration.
See {{NixOS Manual|name=NixOS Manual: Chapter - X Window Syestem|anchor=#sec-x11}} for information on using X11 with NixOS.
= Tips and tricks =
== HiDPI ==
== HiDPI ==


Line 5: Line 15:
Not all software behaves well in high-resolution mode yet. Here are listed most common tweaks which make work on a HiDPI screen more pleasant:
Not all software behaves well in high-resolution mode yet. Here are listed most common tweaks which make work on a HiDPI screen more pleasant:


<pre>
<syntaxhighlight lang="nix">
   # bigger tty fonts
   # bigger tty fonts
   console.font =
   console.font =
Line 11: Line 21:
   services.xserver.dpi = 180;
   services.xserver.dpi = 180;
   environment.variables = {
   environment.variables = {
    ## Used by GTK 3
    # `GDK_SCALE` is limited to integer values
     GDK_SCALE = "2";
     GDK_SCALE = "2";
    # Inverse of GDK_SCALE
     GDK_DPI_SCALE = "0.5";
     GDK_DPI_SCALE = "0.5";
    # Used by Qt 5
    QT_AUTO_SCREEN_SCALE_FACTOR = "1";
     _JAVA_OPTIONS = "-Dsun.java2d.uiScale=2";
     _JAVA_OPTIONS = "-Dsun.java2d.uiScale=2";
   };
   };
</pre>
  # Expose variables to graphical systemd user services
  services.xserver.displayManager.importedVariables = [
    "GDK_SCALE"
    "GDK_DPI_SCALE"
    "QT_AUTO_SCREEN_SCALE_FACTOR"
  ];
</syntaxhighlight>


In NixOS unstable (but not in NixOS 20.03) there is also a dedicated [https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/hardware/video/hidpi.nix HiDPI module]:
To enable HiDPI scaling for Qt 6 applications, add the following to <code>.Xresources</code>:


<pre>
<syntaxhighlight>
{
Xft.dpi: 180
  hardware.video.hidpi.enable = true;
</syntaxhighlight>
}
</pre>


This option will be included by default when using <code>nixos-config-generate</code> and it detects a screen larger than
== Disabling touchpad and mouse accelerations ==
fullhd. This will only set linux console fonts xserver dpi settings and environment variables still needs to be applied manually.


== Disabling touchpad and mouse accelerations ==
To disable touchpad and mouse accelerations just add the following lines to your <code>configuration.nix</code>
To disable touchpad and mouse accelerations just add the following lines to your <code>configuration.nix</code>


<pre>
<syntaxhighlight lang="nix">
   services.xserver = {
   services.xserver = {
     enable = true;
     enable = true;
Line 54: Line 73:


   };
   };
</pre>
</syntaxhighlight>


To get more information see <code>man configuration.nix</code>.
To get more information see <code>man configuration.nix</code>.


== See also ==
== Exclude packages ==
 
Some packages like xterm are included when enabling Xorg. To exclude packages, edit the <code>configuration.nix</code> as the example, but be sure to have another terminal enabled in your build before doing this.
 
<syntaxhighlight lang="nix">
services.xserver.excludePackages = with pkgs; [
  xterm
];
</syntaxhighlight>


= See also =
* [[Wayland]]
* [[Nvidia]]
* [[Nvidia]]
* [[Amd Gpu]]
* [[AMD GPU]]
* [[Intel Graphics]]
* [[Intel Graphics]]
* [[:Category:Desktop environment]]
* [[:Category:Window managers]]
[[Category:Video]]

Latest revision as of 10:23, 16 August 2025

Xorg is the implementation of the X Window System. It acts as the bridge between your system's hardware and the graphical user environment enabling a variety of desktop environments and window managers.

Enabling

On NixOS, users can enable and configure Xorg through the services.xserver module in their system configuration.

See NixOS Manual: Chapter - X Window Syestem for information on using X11 with NixOS.

Tips and tricks

HiDPI

HiDPI (High Dots Per Inch) displays, also known by Apple's "Retina Display" marketing name, are screens with a high resolution in a relatively small format. They are mostly found in high-end laptops and monitors.

Not all software behaves well in high-resolution mode yet. Here are listed most common tweaks which make work on a HiDPI screen more pleasant:

  # bigger tty fonts
  console.font =
    "${pkgs.terminus_font}/share/consolefonts/ter-u28n.psf.gz";
  services.xserver.dpi = 180;
  environment.variables = {
    ## Used by GTK 3
    # `GDK_SCALE` is limited to integer values
    GDK_SCALE = "2";
    # Inverse of GDK_SCALE
    GDK_DPI_SCALE = "0.5";

    # Used by Qt 5
    QT_AUTO_SCREEN_SCALE_FACTOR = "1";

    _JAVA_OPTIONS = "-Dsun.java2d.uiScale=2";
  };
  # Expose variables to graphical systemd user services
  services.xserver.displayManager.importedVariables = [
    "GDK_SCALE"
    "GDK_DPI_SCALE"
    "QT_AUTO_SCREEN_SCALE_FACTOR"
  ];

To enable HiDPI scaling for Qt 6 applications, add the following to .Xresources:

Xft.dpi: 180

Disabling touchpad and mouse accelerations

To disable touchpad and mouse accelerations just add the following lines to your configuration.nix

  services.xserver = {
    enable = true;

    ...

    libinput = {
      enable = true;

      # disabling mouse acceleration
      mouse = {
        accelProfile = "flat";
      };

      # disabling touchpad acceleration
      touchpad = {
        accelProfile = "flat";
      };
    };

    ...

  };

To get more information see man configuration.nix.

Exclude packages

Some packages like xterm are included when enabling Xorg. To exclude packages, edit the configuration.nix as the example, but be sure to have another terminal enabled in your build before doing this.

services.xserver.excludePackages = with pkgs; [
  xterm
];

See also