From 48daf624c5647b344e11a36f9a95e5d8134dd9eb Mon Sep 17 00:00:00 2001 From: Shea Levy Date: Wed, 15 Jan 2014 06:58:16 -0500 Subject: Add module to use kmscon instead of linux-console for VTs This required some changes to systemd unit handling: * Add an option to specify that a unit is just a symlink * Allow specified units to overwrite systemd-provided ones * Have gettys.target require autovt@1.service instead of getty@1.service Signed-off-by: Shea Levy --- nixos/modules/services/ttys/kmscon.nix | 64 ++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 nixos/modules/services/ttys/kmscon.nix (limited to 'nixos/modules/services/ttys') diff --git a/nixos/modules/services/ttys/kmscon.nix b/nixos/modules/services/ttys/kmscon.nix new file mode 100644 index 00000000000..97fe7a1ca1b --- /dev/null +++ b/nixos/modules/services/ttys/kmscon.nix @@ -0,0 +1,64 @@ +{ config, pkgs, ... }: +let + inherit (pkgs.lib) mkOption types mkIf optionalString; + + cfg = config.services.kmscon; + + configDir = pkgs.writeTextFile { name = "kmscon-config"; destination = "/kmscon.conf"; text = cfg.extraConfig; }; +in { + options = { + services.kmscon = { + enable = mkOption { + description = "Use kmscon as the virtual console instead of gettys"; + type = types.bool; + default = false; + }; + + hwRender = mkOption { + description = "Whether to use 3D hardware acceleration to render the console"; + type = types.bool; + default = false; + }; + + extraConfig = mkOption { + description = "Extra contents of the kmscon.conf file"; + type = types.lines; + default = ""; + example = "font-size=14"; + }; + }; + }; + + config = mkIf cfg.enable { + # Largely copied from unit provided with kmscon source + systemd.units."kmsconvt@.service".text = '' + [Unit] + Description=KMS System Console on %I + Documentation=man:kmscon(1) + After=systemd-user-sessions.service + After=plymouth-quit-wait.service + After=systemd-logind.service + Requires=systemd-logind.service + Before=getty.target + Conflicts=getty@%i.service + OnFailure=getty@%i.service + IgnoreOnIsolate=yes + ConditionPathExists=/dev/tty0 + + [Service] + ExecStart=${pkgs.kmscon}/bin/kmscon "--vt=%I" --seats=seat0 --no-switchvt --configdir ${configDir} --login -- ${pkgs.shadow}/bin/login -p + UtmpIdentifier=%I + TTYPath=/dev/%I + TTYReset=yes + TTYVHangup=yes + TTYVTDisallocate=yes + ''; + + systemd.units."autovt@.service".linkTarget = "${config.systemd.units."kmsconvt@.service".unit}/kmsconvt@.service"; + + services.kmscon.extraConfig = mkIf cfg.hwRender '' + drm + hwaccel + ''; + }; +} -- cgit 1.4.1