change kbd layout using setxkbmap
This commit is contained in:
parent
70e8b215cb
commit
4a7800c93f
@ -218,3 +218,7 @@ func (manager *RemoteManager) ScreenConfigurations() map[int]types.ScreenConfigu
|
|||||||
func (manager *RemoteManager) GetScreenSize() *types.ScreenSize {
|
func (manager *RemoteManager) GetScreenSize() *types.ScreenSize {
|
||||||
return xorg.GetScreenSize()
|
return xorg.GetScreenSize()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (manager *RemoteManager) SetKeyboard(layout string) {
|
||||||
|
xorg.SetKeyboard(layout)
|
||||||
|
}
|
@ -22,4 +22,5 @@ type RemoteManager interface {
|
|||||||
ReadClipboard() string
|
ReadClipboard() string
|
||||||
WriteClipboard(data string)
|
WriteClipboard(data string)
|
||||||
ResetKeys()
|
ResetKeys()
|
||||||
|
SetKeyboard(layout string)
|
||||||
}
|
}
|
||||||
|
@ -34,8 +34,9 @@ func (h *MessageHandler) controlRelease(id string, session types.Session) error
|
|||||||
func (h *MessageHandler) controlRequest(id string, session types.Session, payload *message.ControlRequest) error {
|
func (h *MessageHandler) controlRequest(id string, session types.Session, payload *message.ControlRequest) error {
|
||||||
// check for host
|
// check for host
|
||||||
if !h.sessions.HasHost() {
|
if !h.sessions.HasHost() {
|
||||||
// TODO: Keyboard Layout change.
|
// keyboard layout change
|
||||||
h.logger.Warn().Msgf("should set keyboard to %s", payload.KeyboardLayout)
|
h.logger.Debug().Msgf("change keyboard to %s", payload.KeyboardLayout)
|
||||||
|
h.remote.SetKeyboard(payload.KeyboardLayout)
|
||||||
|
|
||||||
// set host
|
// set host
|
||||||
h.sessions.SetHost(id)
|
h.sessions.SetHost(id)
|
||||||
|
@ -165,3 +165,10 @@ short XGetScreenRate() {
|
|||||||
XRRScreenConfiguration *conf = XRRGetScreenInfo(display, RootWindow(display, 0));
|
XRRScreenConfiguration *conf = XRRGetScreenInfo(display, RootWindow(display, 0));
|
||||||
return XRRConfigCurrentRate(conf);
|
return XRRConfigCurrentRate(conf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetKeyboard(char *layout) {
|
||||||
|
// TOOD: refactor, use native API.
|
||||||
|
char cmd[12] = "setxkbmap ";
|
||||||
|
strcat(cmd, layout);
|
||||||
|
system(cmd);
|
||||||
|
}
|
||||||
|
@ -210,6 +210,16 @@ func GetScreenSize() *types.ScreenSize {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SetKeyboard(layout string) {
|
||||||
|
mu.Lock()
|
||||||
|
defer mu.Unlock()
|
||||||
|
|
||||||
|
layoutUnsafe := C.CString(layout)
|
||||||
|
defer C.free(unsafe.Pointer(layoutUnsafe))
|
||||||
|
|
||||||
|
C.SetKeyboard(layoutUnsafe)
|
||||||
|
}
|
||||||
|
|
||||||
//export goCreateScreenSize
|
//export goCreateScreenSize
|
||||||
func goCreateScreenSize(index C.int, width C.int, height C.int, mwidth C.int, mheight C.int) {
|
func goCreateScreenSize(index C.int, width C.int, height C.int, mwidth C.int, mheight C.int) {
|
||||||
ScreenConfigurations[int(index)] = types.ScreenConfiguration{
|
ScreenConfigurations[int(index)] = types.ScreenConfiguration{
|
||||||
|
@ -38,5 +38,7 @@
|
|||||||
|
|
||||||
void XDisplayClose(void);
|
void XDisplayClose(void);
|
||||||
void XDisplaySet(char *input);
|
void XDisplaySet(char *input);
|
||||||
|
|
||||||
|
void SetKeyboard(char *layout);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user