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
|
||||
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 = 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 O: u32 = 0;
|
||||
|
||||
pub const WIDTH: u64 = 5;
|
||||
pub const HEIGHT: u64 = 5;
|
||||
pub const WIDTH = 5;
|
||||
pub const HEIGHT = 5;
|
||||
pub const SIZE = WIDTH * HEIGHT;
|
||||
|
||||
// zig fmt: off
|
||||
const ZERO = [_]u32{
|
||||
const ZERO = [_]u21{
|
||||
X,X,X,X,X,
|
||||
X,X,O,X,X,
|
||||
X,X,O,X,X,
|
||||
X,X,O,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,
|
||||
};
|
||||
const TWO = [_]u32{
|
||||
const TWO = [_]u21{
|
||||
X,X,X,X,X,
|
||||
O,O,O,X,X,
|
||||
X,X,X,X,X,
|
||||
X,X,O,O,O,
|
||||
X,X,X,X,X,
|
||||
};
|
||||
const THREE = [_]u32{
|
||||
const THREE = [_]u21{
|
||||
X,X,X,X,X,
|
||||
O,O,O,X,X,
|
||||
X,X,X,X,X,
|
||||
O,O,O,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,X,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,O,O,O,
|
||||
X,X,X,X,X,
|
||||
O,O,O,X,X,
|
||||
X,X,X,X,X,
|
||||
};
|
||||
const SIX = [_]u32{
|
||||
const SIX = [_]u21{
|
||||
X,X,X,X,X,
|
||||
X,X,O,O,O,
|
||||
X,X,X,X,X,
|
||||
X,X,O,X,X,
|
||||
X,X,X,X,X,
|
||||
};
|
||||
const SEVEN = [_]u32{
|
||||
const SEVEN = [_]u21{
|
||||
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 EIGHT = [_]u32{
|
||||
const EIGHT = [_]u21{
|
||||
X,X,X,X,X,
|
||||
X,X,O,X,X,
|
||||
X,X,X,X,X,
|
||||
X,X,O,X,X,
|
||||
X,X,X,X,X,
|
||||
};
|
||||
const NINE = [_]u32{
|
||||
const NINE = [_]u21{
|
||||
X,X,X,X,X,
|
||||
X,X,O,X,X,
|
||||
X,X,X,X,X,
|
||||
O,O,O,X,X,
|
||||
X,X,X,X,X,
|
||||
};
|
||||
const S = [_]u32{
|
||||
const S = [_]u21{
|
||||
O,O,O,O,O,
|
||||
O,O,X,O,O,
|
||||
O,O,O,O,O,
|
||||
O,O,X,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,
|
||||
|
|
@ -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) {
|
||||
'0' => &ZERO,
|
||||
'1' => &ONE,
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ max_login_len: u8 = 255,
|
|||
max_password_len: u8 = 255,
|
||||
mcookie_cmd: []const u8 = "/usr/bin/mcookie",
|
||||
min_refresh_delta: u16 = 5,
|
||||
numlock: bool = false,
|
||||
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_key: []const u8 = "F2",
|
||||
|
|
|
|||
|
|
@ -48,7 +48,9 @@ pub const VT_ACTIVATE: c_int = 0x5606;
|
|||
pub const VT_WAITACTIVE: c_int = 0x5607;
|
||||
|
||||
pub const KDGETLED: c_int = 0x4B31;
|
||||
pub const KDSETLED: c_int = 0x4B32;
|
||||
pub const KDGKBLED: c_int = 0x4B64;
|
||||
pub const KDSKBLED: c_int = 0x4B65;
|
||||
|
||||
pub const LED_NUM: c_int = 0x02;
|
||||
pub const LED_CAP: c_int = 0x04;
|
||||
|
|
@ -82,9 +84,8 @@ pub fn getLockState(console_dev: [:0]const u8) !struct {
|
|||
numlock: bool,
|
||||
capslock: bool,
|
||||
} {
|
||||
const fd = std.c.open(console_dev, .{ .ACCMODE = .RDONLY });
|
||||
if (fd < 0) return error.CannotOpenConsoleDev;
|
||||
defer _ = std.c.close(fd);
|
||||
const fd = try std.posix.open(console_dev, .{ .ACCMODE = .RDONLY }, 0);
|
||||
defer std.posix.close(fd);
|
||||
|
||||
var numlock = false;
|
||||
var capslock = false;
|
||||
|
|
@ -106,3 +107,17 @@ pub fn getLockState(console_dev: [:0]const u8) !struct {
|
|||
.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
|
||||
get_host_name: {
|
||||
var name_buf: [std.posix.HOST_NAME_MAX]u8 = undefined;
|
||||
|
|
@ -250,16 +252,14 @@ pub fn main() !void {
|
|||
var restart = false;
|
||||
var auth_fails: u64 = 0;
|
||||
|
||||
// Switch to selected TTY if possible
|
||||
open_console_dev: {
|
||||
const fd = std.c.open(config.console_dev, .{ .ACCMODE = .WRONLY });
|
||||
defer _ = std.c.close(fd);
|
||||
|
||||
if (fd < 0) {
|
||||
const fd = std.posix.open(config.console_dev, .{ .ACCMODE = .WRONLY }, 0) catch {
|
||||
try info_line.setText(lang.err_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_WAITACTIVE, config.tty);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue