mirror of https://github.com/fairyglade/ly.git
Add option to turn on numlock at startup
This commit is contained in:
parent
74f7f08801
commit
cbc2cb933f
|
|
@ -119,6 +119,9 @@ path = /sbin:/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin
|
||||||
# Event timeout in milliseconds
|
# Event timeout in milliseconds
|
||||||
min_refresh_delta = 5
|
min_refresh_delta = 5
|
||||||
|
|
||||||
|
# Set numlock on/off at startup
|
||||||
|
numlock = false
|
||||||
|
|
||||||
# Service name (set to ly to use the provided pam config file)
|
# Service name (set to ly to use the provided pam config file)
|
||||||
service_name = ly
|
service_name = ly
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,89 +8,89 @@ const termbox = interop.termbox;
|
||||||
const X: u32 = if (builtin.os.tag == .linux or builtin.os.tag.isBSD()) 0x2593 else '#';
|
const X: u32 = if (builtin.os.tag == .linux or builtin.os.tag.isBSD()) 0x2593 else '#';
|
||||||
const O: u32 = 0;
|
const O: u32 = 0;
|
||||||
|
|
||||||
pub const WIDTH: u64 = 5;
|
pub const WIDTH = 5;
|
||||||
pub const HEIGHT: u64 = 5;
|
pub const HEIGHT = 5;
|
||||||
pub const SIZE = WIDTH * HEIGHT;
|
pub const SIZE = WIDTH * HEIGHT;
|
||||||
|
|
||||||
// zig fmt: off
|
// zig fmt: off
|
||||||
const ZERO = [_]u32{
|
const ZERO = [_]u21{
|
||||||
X,X,X,X,X,
|
X,X,X,X,X,
|
||||||
X,X,O,X,X,
|
X,X,O,X,X,
|
||||||
X,X,O,X,X,
|
X,X,O,X,X,
|
||||||
X,X,O,X,X,
|
X,X,O,X,X,
|
||||||
X,X,X,X,X,
|
X,X,X,X,X,
|
||||||
};
|
};
|
||||||
const ONE = [_]u32{
|
const ONE = [_]u21{
|
||||||
O,O,O,X,X,
|
O,O,O,X,X,
|
||||||
O,O,O,X,X,
|
O,O,O,X,X,
|
||||||
O,O,O,X,X,
|
O,O,O,X,X,
|
||||||
O,O,O,X,X,
|
O,O,O,X,X,
|
||||||
O,O,O,X,X,
|
O,O,O,X,X,
|
||||||
};
|
};
|
||||||
const TWO = [_]u32{
|
const TWO = [_]u21{
|
||||||
X,X,X,X,X,
|
X,X,X,X,X,
|
||||||
O,O,O,X,X,
|
O,O,O,X,X,
|
||||||
X,X,X,X,X,
|
X,X,X,X,X,
|
||||||
X,X,O,O,O,
|
X,X,O,O,O,
|
||||||
X,X,X,X,X,
|
X,X,X,X,X,
|
||||||
};
|
};
|
||||||
const THREE = [_]u32{
|
const THREE = [_]u21{
|
||||||
X,X,X,X,X,
|
X,X,X,X,X,
|
||||||
O,O,O,X,X,
|
O,O,O,X,X,
|
||||||
X,X,X,X,X,
|
X,X,X,X,X,
|
||||||
O,O,O,X,X,
|
O,O,O,X,X,
|
||||||
X,X,X,X,X,
|
X,X,X,X,X,
|
||||||
};
|
};
|
||||||
const FOUR = [_]u32{
|
const FOUR = [_]u21{
|
||||||
X,X,O,X,X,
|
X,X,O,X,X,
|
||||||
X,X,O,X,X,
|
X,X,O,X,X,
|
||||||
X,X,X,X,X,
|
X,X,X,X,X,
|
||||||
O,O,O,X,X,
|
O,O,O,X,X,
|
||||||
O,O,O,X,X,
|
O,O,O,X,X,
|
||||||
};
|
};
|
||||||
const FIVE = [_]u32{
|
const FIVE = [_]u21{
|
||||||
X,X,X,X,X,
|
X,X,X,X,X,
|
||||||
X,X,O,O,O,
|
X,X,O,O,O,
|
||||||
X,X,X,X,X,
|
X,X,X,X,X,
|
||||||
O,O,O,X,X,
|
O,O,O,X,X,
|
||||||
X,X,X,X,X,
|
X,X,X,X,X,
|
||||||
};
|
};
|
||||||
const SIX = [_]u32{
|
const SIX = [_]u21{
|
||||||
X,X,X,X,X,
|
X,X,X,X,X,
|
||||||
X,X,O,O,O,
|
X,X,O,O,O,
|
||||||
X,X,X,X,X,
|
X,X,X,X,X,
|
||||||
X,X,O,X,X,
|
X,X,O,X,X,
|
||||||
X,X,X,X,X,
|
X,X,X,X,X,
|
||||||
};
|
};
|
||||||
const SEVEN = [_]u32{
|
const SEVEN = [_]u21{
|
||||||
X,X,X,X,X,
|
X,X,X,X,X,
|
||||||
O,O,O,X,X,
|
O,O,O,X,X,
|
||||||
O,O,O,X,X,
|
O,O,O,X,X,
|
||||||
O,O,O,X,X,
|
O,O,O,X,X,
|
||||||
O,O,O,X,X,
|
O,O,O,X,X,
|
||||||
};
|
};
|
||||||
const EIGHT = [_]u32{
|
const EIGHT = [_]u21{
|
||||||
X,X,X,X,X,
|
X,X,X,X,X,
|
||||||
X,X,O,X,X,
|
X,X,O,X,X,
|
||||||
X,X,X,X,X,
|
X,X,X,X,X,
|
||||||
X,X,O,X,X,
|
X,X,O,X,X,
|
||||||
X,X,X,X,X,
|
X,X,X,X,X,
|
||||||
};
|
};
|
||||||
const NINE = [_]u32{
|
const NINE = [_]u21{
|
||||||
X,X,X,X,X,
|
X,X,X,X,X,
|
||||||
X,X,O,X,X,
|
X,X,O,X,X,
|
||||||
X,X,X,X,X,
|
X,X,X,X,X,
|
||||||
O,O,O,X,X,
|
O,O,O,X,X,
|
||||||
X,X,X,X,X,
|
X,X,X,X,X,
|
||||||
};
|
};
|
||||||
const S = [_]u32{
|
const S = [_]u21{
|
||||||
O,O,O,O,O,
|
O,O,O,O,O,
|
||||||
O,O,X,O,O,
|
O,O,X,O,O,
|
||||||
O,O,O,O,O,
|
O,O,O,O,O,
|
||||||
O,O,X,O,O,
|
O,O,X,O,O,
|
||||||
O,O,O,O,O,
|
O,O,O,O,O,
|
||||||
};
|
};
|
||||||
const E = [_]u32{
|
const E = [_]u21{
|
||||||
O,O,O,O,O,
|
O,O,O,O,O,
|
||||||
O,O,O,O,O,
|
O,O,O,O,O,
|
||||||
O,O,O,O,O,
|
O,O,O,O,O,
|
||||||
|
|
@ -122,7 +122,7 @@ pub fn alphaBlit(buffer: [*]termbox.tb_cell, x: u64, y: u64, tb_width: u64, tb_h
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn toBigNumber(char: u8) []const u32 {
|
fn toBigNumber(char: u8) []const u21 {
|
||||||
return switch (char) {
|
return switch (char) {
|
||||||
'0' => &ZERO,
|
'0' => &ZERO,
|
||||||
'1' => &ONE,
|
'1' => &ONE,
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ max_login_len: u8 = 255,
|
||||||
max_password_len: u8 = 255,
|
max_password_len: u8 = 255,
|
||||||
mcookie_cmd: []const u8 = "/usr/bin/mcookie",
|
mcookie_cmd: []const u8 = "/usr/bin/mcookie",
|
||||||
min_refresh_delta: u16 = 5,
|
min_refresh_delta: u16 = 5,
|
||||||
|
numlock: bool = false,
|
||||||
path: ?[:0]const u8 = "/sbin:/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin",
|
path: ?[:0]const u8 = "/sbin:/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin",
|
||||||
restart_cmd: []const u8 = "/sbin/shutdown -r now",
|
restart_cmd: []const u8 = "/sbin/shutdown -r now",
|
||||||
restart_key: []const u8 = "F2",
|
restart_key: []const u8 = "F2",
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,9 @@ pub const VT_ACTIVATE: c_int = 0x5606;
|
||||||
pub const VT_WAITACTIVE: c_int = 0x5607;
|
pub const VT_WAITACTIVE: c_int = 0x5607;
|
||||||
|
|
||||||
pub const KDGETLED: c_int = 0x4B31;
|
pub const KDGETLED: c_int = 0x4B31;
|
||||||
|
pub const KDSETLED: c_int = 0x4B32;
|
||||||
pub const KDGKBLED: c_int = 0x4B64;
|
pub const KDGKBLED: c_int = 0x4B64;
|
||||||
|
pub const KDSKBLED: c_int = 0x4B65;
|
||||||
|
|
||||||
pub const LED_NUM: c_int = 0x02;
|
pub const LED_NUM: c_int = 0x02;
|
||||||
pub const LED_CAP: c_int = 0x04;
|
pub const LED_CAP: c_int = 0x04;
|
||||||
|
|
@ -82,9 +84,8 @@ pub fn getLockState(console_dev: [:0]const u8) !struct {
|
||||||
numlock: bool,
|
numlock: bool,
|
||||||
capslock: bool,
|
capslock: bool,
|
||||||
} {
|
} {
|
||||||
const fd = std.c.open(console_dev, .{ .ACCMODE = .RDONLY });
|
const fd = try std.posix.open(console_dev, .{ .ACCMODE = .RDONLY }, 0);
|
||||||
if (fd < 0) return error.CannotOpenConsoleDev;
|
defer std.posix.close(fd);
|
||||||
defer _ = std.c.close(fd);
|
|
||||||
|
|
||||||
var numlock = false;
|
var numlock = false;
|
||||||
var capslock = false;
|
var capslock = false;
|
||||||
|
|
@ -106,3 +107,17 @@ pub fn getLockState(console_dev: [:0]const u8) !struct {
|
||||||
.capslock = capslock,
|
.capslock = capslock,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn setNumlock(console_dev: [:0]const u8, val: bool) !void {
|
||||||
|
const fd = try std.posix.open(console_dev, .{ .ACCMODE = .RDONLY }, 0);
|
||||||
|
defer std.posix.close(fd);
|
||||||
|
|
||||||
|
var led: c_char = undefined;
|
||||||
|
_ = std.c.ioctl(fd, KDGKBLED, &led);
|
||||||
|
|
||||||
|
const numlock = (led & K_NUMLOCK) != 0;
|
||||||
|
if (numlock != val) {
|
||||||
|
const status = std.c.ioctl(fd, KDSKBLED, led ^ K_NUMLOCK);
|
||||||
|
if (status != 0) return error.FailedToSetNumlock;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
12
src/main.zig
12
src/main.zig
|
|
@ -127,6 +127,8 @@ pub fn main() !void {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interop.setNumlock(config.console_dev, config.numlock) catch {};
|
||||||
|
|
||||||
// Initialize information line with host name
|
// Initialize information line with host name
|
||||||
get_host_name: {
|
get_host_name: {
|
||||||
var name_buf: [std.posix.HOST_NAME_MAX]u8 = undefined;
|
var name_buf: [std.posix.HOST_NAME_MAX]u8 = undefined;
|
||||||
|
|
@ -250,16 +252,14 @@ pub fn main() !void {
|
||||||
var restart = false;
|
var restart = false;
|
||||||
var auth_fails: u64 = 0;
|
var auth_fails: u64 = 0;
|
||||||
|
|
||||||
// Switch to selected TTY if possible
|
|
||||||
open_console_dev: {
|
open_console_dev: {
|
||||||
const fd = std.c.open(config.console_dev, .{ .ACCMODE = .WRONLY });
|
const fd = std.posix.open(config.console_dev, .{ .ACCMODE = .WRONLY }, 0) catch {
|
||||||
defer _ = std.c.close(fd);
|
|
||||||
|
|
||||||
if (fd < 0) {
|
|
||||||
try info_line.setText(lang.err_console_dev);
|
try info_line.setText(lang.err_console_dev);
|
||||||
break :open_console_dev;
|
break :open_console_dev;
|
||||||
}
|
};
|
||||||
|
defer std.posix.close(fd);
|
||||||
|
|
||||||
|
// Switch to selected TTY if possible
|
||||||
_ = std.c.ioctl(fd, interop.VT_ACTIVATE, config.tty);
|
_ = std.c.ioctl(fd, interop.VT_ACTIVATE, config.tty);
|
||||||
_ = std.c.ioctl(fd, interop.VT_WAITACTIVE, config.tty);
|
_ = std.c.ioctl(fd, interop.VT_WAITACTIVE, config.tty);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue