diff --git a/res/config.ini b/res/config.ini index 2e3579e..2e015c1 100644 --- a/res/config.ini +++ b/res/config.ini @@ -312,6 +312,10 @@ sleep_cmd = null # Specifies the key used for sleep (F1-F12) sleep_key = F3 +# Command executed when starting Ly (before the TTY is taken control of) +# If null, no command will be executed +start_cmd = null + # Center the session name. text_in_center = false diff --git a/res/lang/ar.ini b/res/lang/ar.ini index a35d449..0d733c5 100644 --- a/res/lang/ar.ini +++ b/res/lang/ar.ini @@ -48,6 +48,7 @@ err_pwnam = فشل في جلب معلومات المستخدم err_sleep = فشل في تنفيذ أمر sleep + err_tty_ctrl = فشل في نقل تحكم الطرفية (TTY) diff --git a/res/lang/bg.ini b/res/lang/bg.ini index 06cca36..984d44d 100644 --- a/res/lang/bg.ini +++ b/res/lang/bg.ini @@ -46,6 +46,7 @@ err_perm_group = неуспешно понижаване на правата н err_perm_user = неуспешно понижаване на правата на потребителя err_pwnam = неуспешно получаване на информация за потребителя err_sleep = неуспешно изпълнение на командата за заспиване + err_battery = неуспешно зареждане на състоянието на батерията err_switch_tty = неуспешна смяна на TTY err_tty_ctrl = неуспешно прехвърляне на контрола над TTY diff --git a/res/lang/cat.ini b/res/lang/cat.ini index f11930e..526e858 100644 --- a/res/lang/cat.ini +++ b/res/lang/cat.ini @@ -51,6 +51,7 @@ err_pwnam = error en obtenir la informació de l'usuari + err_user_gid = error en establir el GID de l'usuari err_user_init = error en inicialitzar usuari err_user_uid = error en establir l'UID de l'usuari diff --git a/res/lang/cs.ini b/res/lang/cs.ini index ee52e2a..b42a52c 100644 --- a/res/lang/cs.ini +++ b/res/lang/cs.ini @@ -51,6 +51,7 @@ err_pwnam = nelze získat informace o uživateli + err_user_gid = nastavení GID uživatele selhalo err_user_init = inicializace uživatele selhala err_user_uid = nastavení UID uživateli selhalo diff --git a/res/lang/de.ini b/res/lang/de.ini index 0715006..02034b9 100644 --- a/res/lang/de.ini +++ b/res/lang/de.ini @@ -48,6 +48,7 @@ err_pwnam = Abrufen der Benutzerinformationen fehlgeschlagen err_sleep = Sleep-Befehl fehlgeschlagen + err_tty_ctrl = Fehler bei der TTY-Uebergabe diff --git a/res/lang/en.ini b/res/lang/en.ini index 6de93fb..38ad8f5 100644 --- a/res/lang/en.ini +++ b/res/lang/en.ini @@ -46,6 +46,7 @@ err_perm_group = failed to downgrade group permissions err_perm_user = failed to downgrade user permissions err_pwnam = failed to get user info err_sleep = failed to execute sleep command +err_start = failed to execute start command err_battery = failed to load battery status err_switch_tty = failed to switch tty err_tty_ctrl = tty control transfer failed diff --git a/res/lang/es.ini b/res/lang/es.ini index 2fbba01..e14aea9 100644 --- a/res/lang/es.ini +++ b/res/lang/es.ini @@ -51,6 +51,7 @@ err_pwnam = error al obtener la información del usuario + err_user_gid = error al establecer el GID del usuario err_user_init = error al inicializar usuario err_user_uid = error al establecer el UID del usuario diff --git a/res/lang/fr.ini b/res/lang/fr.ini index 046a74d..8236184 100644 --- a/res/lang/fr.ini +++ b/res/lang/fr.ini @@ -46,6 +46,7 @@ err_perm_group = échec du déclassement des permissions de groupe err_perm_user = échec du déclassement des permissions utilisateur err_pwnam = échec de lecture des infos utilisateur err_sleep = échec de l'exécution de la commande de veille +err_start = échec de l'exécution de la commande de démarrage err_battery = échec de lecture de l'état de la batterie err_switch_tty = échec du changement de terminal err_tty_ctrl = échec du transfert de contrôle du terminal diff --git a/res/lang/it.ini b/res/lang/it.ini index 9eac717..7c90a8f 100644 --- a/res/lang/it.ini +++ b/res/lang/it.ini @@ -51,6 +51,7 @@ err_pwnam = impossibile ottenere dati utente + err_user_gid = impossibile impostare GID utente err_user_init = impossibile inizializzare utente err_user_uid = impossible impostare UID utente diff --git a/res/lang/ja_JP.ini b/res/lang/ja_JP.ini index 6cb303e..cb299df 100644 --- a/res/lang/ja_JP.ini +++ b/res/lang/ja_JP.ini @@ -48,6 +48,7 @@ err_pwnam = ユーザー情報の取得に失敗しました err_sleep = スリープコマンドの実行に失敗しました + err_tty_ctrl = TTY制御の転送に失敗しました diff --git a/res/lang/lv.ini b/res/lang/lv.ini index cfaddb5..9b6f6cf 100644 --- a/res/lang/lv.ini +++ b/res/lang/lv.ini @@ -46,6 +46,7 @@ err_perm_group = neizdevās pazemināt grupas atļaujas err_perm_user = neizdevās pazemināt lietotāja atļaujas err_pwnam = neizdevās iegūt lietotāja informāciju err_sleep = neizdevās izpildīt miega komandu + err_battery = neizdevās ielādēt akumulatora stāvokli err_switch_tty = neizdevās pārslēgt tty err_tty_ctrl = tty vadības nodošana neizdevās diff --git a/res/lang/pl.ini b/res/lang/pl.ini index 13bbc4f..40c6895 100644 --- a/res/lang/pl.ini +++ b/res/lang/pl.ini @@ -46,6 +46,7 @@ err_perm_group = nie udało się obniżyć uprawnień grupy err_perm_user = nie udało się obniżyć uprawnień użytkownika err_pwnam = nie udało się uzyskać informacji o użytkowniku err_sleep = nie udało się wykonać polecenia sleep + err_battery = nie udało się sprawdzić statusu baterii err_switch_tty = nie można przełączyć tty err_tty_ctrl = nie udało się przekazać kontroli tty diff --git a/res/lang/pt.ini b/res/lang/pt.ini index f33c363..f0cebd8 100644 --- a/res/lang/pt.ini +++ b/res/lang/pt.ini @@ -51,6 +51,7 @@ err_pwnam = erro ao obter informação do utilizador + err_user_gid = erro ao definir o GID do utilizador err_user_init = erro ao iniciar o utilizador err_user_uid = erro ao definir o UID do utilizador diff --git a/res/lang/pt_BR.ini b/res/lang/pt_BR.ini index bf3c329..a8eb90f 100644 --- a/res/lang/pt_BR.ini +++ b/res/lang/pt_BR.ini @@ -51,6 +51,7 @@ err_pwnam = não foi possível obter informações do usuário + err_user_gid = não foi possível definir o GID do usuário err_user_init = não foi possível iniciar o usuário err_user_uid = não foi possível definir o UID do usuário diff --git a/res/lang/ro.ini b/res/lang/ro.ini index 18c35b7..8e5c6cf 100644 --- a/res/lang/ro.ini +++ b/res/lang/ro.ini @@ -60,6 +60,7 @@ err_perm_user = nu s-a putut face downgrade permisiunilor de utilizator + login = utilizator logout = opreşte sesiunea diff --git a/res/lang/ru.ini b/res/lang/ru.ini index ac1c302..26e9fbf 100644 --- a/res/lang/ru.ini +++ b/res/lang/ru.ini @@ -46,6 +46,7 @@ err_perm_group = не удалось понизить права доступа err_perm_user = не удалось понизить права доступа пользователя err_pwnam = не удалось получить информацию о пользователе err_sleep = не удалось выполнить команду sleep + err_battery = не удалось получить статус батареи err_switch_tty = не удалось переключить tty err_tty_ctrl = передача управления tty не удалась diff --git a/res/lang/sr.ini b/res/lang/sr.ini index f49cbdf..5c9cb64 100644 --- a/res/lang/sr.ini +++ b/res/lang/sr.ini @@ -51,6 +51,7 @@ err_pwnam = neuspijesno skupljanje informacija o korisniku + err_user_gid = neuspijesno postavljanje korisničkog GID-a err_user_init = neuspijensa inicijalizacija korisnika err_user_uid = neuspijesno postavljanje UID-a korisnika diff --git a/res/lang/sv.ini b/res/lang/sv.ini index ec9a372..de329f1 100644 --- a/res/lang/sv.ini +++ b/res/lang/sv.ini @@ -51,6 +51,7 @@ err_pwnam = misslyckades att hämta användarinfo + err_user_gid = misslyckades att ställa in användar-GID err_user_init = misslyckades att initialisera användaren err_user_uid = misslyckades att ställa in användar-UID diff --git a/res/lang/tr.ini b/res/lang/tr.ini index c4e0b1b..0bf1ffe 100644 --- a/res/lang/tr.ini +++ b/res/lang/tr.ini @@ -51,6 +51,7 @@ err_pwnam = kullanici bilgileri alinamadi + err_user_gid = kullanici icin GID ayarlanamadi err_user_init = kullanici oturumu baslatilamadi err_user_uid = kullanici icin UID ayarlanamadi diff --git a/res/lang/uk.ini b/res/lang/uk.ini index cddce01..36e4ce3 100644 --- a/res/lang/uk.ini +++ b/res/lang/uk.ini @@ -51,6 +51,7 @@ err_pwnam = не вдалося отримати дані користувача + err_user_gid = не вдалося змінити GID користувача err_user_init = не вдалося ініціалізувати користувача err_user_uid = не вдалося змінити UID користувача diff --git a/res/lang/zh_CN.ini b/res/lang/zh_CN.ini index c7d51b9..fd7b4ea 100644 --- a/res/lang/zh_CN.ini +++ b/res/lang/zh_CN.ini @@ -51,6 +51,7 @@ err_pwnam = 获取用户信息失败 + err_user_gid = 设置用户GID失败 err_user_init = 初始化用户失败 err_user_uid = 设置用户UID失败 diff --git a/src/config/Config.zig b/src/config/Config.zig index 5ddfe80..a952be8 100644 --- a/src/config/Config.zig +++ b/src/config/Config.zig @@ -79,6 +79,7 @@ shutdown_cmd: []const u8 = "/sbin/shutdown -a now", shutdown_key: []const u8 = "F1", sleep_cmd: ?[]const u8 = null, sleep_key: []const u8 = "F3", +start_cmd: ?[]const u8 = null, text_in_center: bool = false, vi_default_mode: ViMode = .normal, vi_mode: bool = false, diff --git a/src/config/Lang.zig b/src/config/Lang.zig index 55589f2..4134933 100644 --- a/src/config/Lang.zig +++ b/src/config/Lang.zig @@ -51,6 +51,7 @@ err_perm_group: []const u8 = "failed to downgrade group permissions", err_perm_user: []const u8 = "failed to downgrade user permissions", err_pwnam: []const u8 = "failed to get user info", err_sleep: []const u8 = "failed to execute sleep command", +err_start: []const u8 = "failed to execute start command", err_battery: []const u8 = "failed to load battery status", err_switch_tty: []const u8 = "failed to switch tty", err_tty_ctrl: []const u8 = "tty control transfer failed", diff --git a/src/main.zig b/src/main.zig index 935cf1d..7addd74 100644 --- a/src/main.zig +++ b/src/main.zig @@ -124,6 +124,7 @@ pub fn main() !void { var lang: Lang = undefined; var old_save_file_exists = false; var maybe_config_load_error: ?anyerror = null; + var start_cmd_exit_code: u8 = 0; var can_get_lock_state = true; var can_draw_clock = true; var can_draw_battery = true; @@ -282,6 +283,19 @@ pub fn main() !void { restart_cmd = try temporary_allocator.dupe(u8, config.restart_cmd); commands_allocated = true; + if (config.start_cmd) |start_cmd| { + var sleep = std.process.Child.init(&[_][]const u8{ "/bin/sh", "-c", start_cmd }, allocator); + sleep.stdout_behavior = .Ignore; + sleep.stderr_behavior = .Ignore; + + handle_start_cmd: { + const process_result = sleep.spawnAndWait() catch { + break :handle_start_cmd; + }; + start_cmd_exit_code = process_result.Exited; + } + } + // Initialize termbox try log_writer.writeAll("initializing termbox2\n"); _ = termbox.tb_init(); @@ -351,6 +365,11 @@ pub fn main() !void { try log_writer.print("failed to get uid range: {s}; falling back to default\n", .{@errorName(err)}); } + if (start_cmd_exit_code != 0) { + try info_line.addMessage(lang.err_start, config.error_bg, config.error_fg); + try log_writer.print("failed to execute start command: exit code {d}\n", .{start_cmd_exit_code}); + } + if (maybe_config_load_error) |err| { // We can't localize this since the config failed to load so we'd fallback to the default language anyway try info_line.addMessage("unable to parse config file", config.error_bg, config.error_fg);