From 77acf552714386281be10056e9b155fadce01aab Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Mon, 20 Feb 2023 18:58:13 +0100 Subject: [PATCH] login-app: Able to change keymap --- pkg/login-app/Dockerfile | 4 +++ pkg/login-app/cmd/dialog-login.go | 3 ++ pkg/login-app/cmd/dialog-settings.go | 42 ++++++++++++++++++++++++++++ pkg/login-app/cmd/dialog-uefi.go | 2 +- 4 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 pkg/login-app/cmd/dialog-settings.go diff --git a/pkg/login-app/Dockerfile b/pkg/login-app/Dockerfile index e4c60e6..9172908 100644 --- a/pkg/login-app/Dockerfile +++ b/pkg/login-app/Dockerfile @@ -11,6 +11,8 @@ ADD cmd ./ RUN go build -v -ldflags="-s -w" -tags netgo -o login-app +RUN apk add --no-cache kbd + FROM alpine:3.17 MAINTAINER Pierre-Olivier Mercier @@ -21,5 +23,7 @@ COPY --from=gobuild /go/src/login-app/login-app /bin/login-app COPY --from=gobuild /usr/share/udhcpc/default.script /usr/share/udhcpc/default.script COPY --from=gobuild /etc/terminfo/l/linux /etc/terminfo/l/linux COPY --from=gobuild /usr/share/terminfo/l/linux /usr/share/terminfo/l/linux +COPY --from=gobuild /usr/bin/loadkeys /usr/bin/loadkeys +COPY --from=gobuild /usr/share/keymaps/xkb/fr.map.gz /usr/share/keymaps/xkb/us.map.gz /usr/share/keymaps/xkb/fr-bepo.map.gz /usr/share/keymaps/xkb/us-colemak.map.gz /usr/share/keymaps/xkb/ ENTRYPOINT ["/bin/login-app"] diff --git a/pkg/login-app/cmd/dialog-login.go b/pkg/login-app/cmd/dialog-login.go index d6138c1..c4747bd 100644 --- a/pkg/login-app/cmd/dialog-login.go +++ b/pkg/login-app/cmd/dialog-login.go @@ -14,6 +14,9 @@ func CreateLoginDialog(app *tview.Application, next func(username, password stri form.GetFormItemByLabel("Login").(*tview.InputField).GetText(), form.GetFormItemByLabel("Password").(*tview.InputField).GetText(), ) + }). + AddButton("Settings...", func() { + goToSettings(app) }) form.SetBorder(true).SetTitle(" SRS Adlin - Login ") diff --git a/pkg/login-app/cmd/dialog-settings.go b/pkg/login-app/cmd/dialog-settings.go new file mode 100644 index 0000000..54bc619 --- /dev/null +++ b/pkg/login-app/cmd/dialog-settings.go @@ -0,0 +1,42 @@ +package main + +import ( + "os/exec" + + "github.com/rivo/tview" +) + +var LastKeymap = 0 + +func goToSettings(app *tview.Application) { + var form *tview.Form + form = tview.NewForm(). + AddDropDown("Keymap", []string{"QWERTY us", "AZERTY fr", "BÉPO", "Colemak us"}, LastKeymap, nil). + AddButton(" Save config ", func() { + if kbmap, _ := form.GetFormItemByLabel("Keymap").(*tview.DropDown).GetCurrentOption(); LastKeymap != kbmap { + file := "/usr/share/keymaps/xkb/" + + switch kbmap { + case 1: + file += "fr.map.gz" + case 2: + file += "fr-bepo.map.gz" + case 3: + file += "us-colemak.map.gz" + default: + file += "us.map.gz" + } + + exec.Command("/usr/bin/loadkeys", file).Run() + LastKeymap = kbmap + } + askLogin(app) + }) + form.GetFormItemByLabel("Keymap").(*tview.DropDown).SetFieldWidth(25) + form.SetBorder(true).SetTitle(" SRS Adlin - Settings ") + + app.SetRoot(modal(form, 25, 7), true) + app.SetFocus(form) + + return +} diff --git a/pkg/login-app/cmd/dialog-uefi.go b/pkg/login-app/cmd/dialog-uefi.go index 3ec4528..9d97e25 100644 --- a/pkg/login-app/cmd/dialog-uefi.go +++ b/pkg/login-app/cmd/dialog-uefi.go @@ -6,7 +6,7 @@ import ( func CreateUEFIDialog(app *tview.Application, next func()) { modal := tview.NewModal(). - SetText("Not UEFI boot\nYou should reboot, enter UEFI Setup (F2) and disable Legacy boot"). + SetText("This machine does not boot in UEFI mode!\nYou should reboot now, enter UEFI Setup (F2) and disable Legacy boot. Or choose another machine, that boot in UEFI."). AddButtons([]string{"Reboot", "Ignore"}). SetDoneFunc(func(buttonIndex int, buttonLabel string) { if buttonLabel == "Reboot" {