LINUX.ORG.RU

История изменений

Исправление Im_not_a_robot, (текущая версия) :

То, что ты хочешь (я особо не вчитывался), можно реализовать своими скриптами (не знаю, можно ли в гноме назначить Капслок, у меня на Капслоке дополнительный Контрол), причем довольно простыми. На случай, если ты захочешь это делать, могу поделиться гномовской магией для получения текущей раскладки и переключения:

# получить номер текущей раскладки в виде "(true, '0')", где 0 -- номер раскладки
gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().currentSource.index"

# установить раскладку с номером 0 или любой другой -- 1, 2, 3
gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources[0].activate()"

Магия переключает штатными гномовскими средствами, поэтому без изменений работает хоть в иксах, хоть в вейланде. Например, у меня был скрипт, хотя почему был, он у меня и сейчас меняет раскладку в neovim и vscode-vim (если в Insert mode русский, например, при переключении в Normal mode чтобы был английский, а при переключении в Insert вернулся русский):

$ cat $(which gnome_keyboard_layout)
#!/bin/sh

# Returns the number of current keyboard layout if script is
# running without an argument.
#
# Sets the keyboard layout, if script is running with argument (number
# of keyboard layout).

HELP1="Returns the number of current keyboard layout if script is running without an argument."
HELP2="Sets the keyboard layout, if script is running with argument (number of keyboard layout)."

GET_KL=$(gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().currentSource.index")

if [ "$GET_KL" == "(true, '0')" ]; then
    KL=0
elif [ "$GET_KL" == "(true, '1')" ]; then
    KL=1
elif [ "$GET_KL" == "(true, '2')" ]; then
    KL=2
fi

if [ "$1" == "-h" ]; then
    echo $HELP1
    echo $HELP2
elif [ "$1" == "0" ]; then
    gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources[0].activate()"
elif [ "$1" == "1" ]; then
    gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources[1].activate()"
elif [ "$1" == "2" ]; then
    gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources[2].activate()"
else
    echo $KL
fi

Исправление Im_not_a_robot, :

То, что ты хочешь, можно реализовать своими скриптами (не знаю, можно ли в гноме назначить Капслок, у меня на Капслоке дополнительный Контрол), причем довольно простыми. На случай, если ты захочешь это делать, могу поделиться гномовской магией для получения текущей раскладки и переключения:

# получить номер текущей раскладки в виде "(true, '0')", где 0 -- номер раскладки
gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().currentSource.index"

# установить раскладку с номером 0 или любой другой -- 1, 2, 3
gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources[0].activate()"

Магия переключает штатными гномовскими средствами, поэтому без изменений работает хоть в иксах, хоть в вейланде. Например, у меня был скрипт, хотя почему был, он у меня и сейчас меняет раскладку в neovim и vscode-vim (если в Insert mode русский, например, при переключении в Normal mode чтобы был английский, а при переключении в Insert вернулся русский):

$ cat $(which gnome_keyboard_layout)
#!/bin/sh

# Returns the number of current keyboard layout if script is
# running without an argument.
#
# Sets the keyboard layout, if script is running with argument (number
# of keyboard layout).

HELP1="Returns the number of current keyboard layout if script is running without an argument."
HELP2="Sets the keyboard layout, if script is running with argument (number of keyboard layout)."

GET_KL=$(gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().currentSource.index")

if [ "$GET_KL" == "(true, '0')" ]; then
    KL=0
elif [ "$GET_KL" == "(true, '1')" ]; then
    KL=1
elif [ "$GET_KL" == "(true, '2')" ]; then
    KL=2
fi

if [ "$1" == "-h" ]; then
    echo $HELP1
    echo $HELP2
elif [ "$1" == "0" ]; then
    gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources[0].activate()"
elif [ "$1" == "1" ]; then
    gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources[1].activate()"
elif [ "$1" == "2" ]; then
    gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources[2].activate()"
else
    echo $KL
fi

Исходная версия Im_not_a_robot, :

То, что ты хочешь, можно реализовать своими скриптами (не знаю, можно ли в гноме назначить Капслок, а меня на Капслоке дополнительный Контрол), причем довольно простыми. На случай, если ты захочешь это делать, могу поделиться гномовской магией для получения текущей раскладки и переключения:

# получить номер текущей раскладки в виде "(true, '0')", где 0 -- номер раскладки
gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().currentSource.index"

# установить раскладку с номером 0 или любой другой -- 1, 2, 3
gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources[0].activate()"

Магия переключает штатными гномовскими средствами, поэтому без изменений работает хоть в иксах, хоть в вейланде. Например, у меня был скрипт, хотя почему был, он у меня и сейчас меняет раскладку в neovim и vscode-vim (если в Insert mode русский, например, при переключении в Normal mode чтобы был английский, а при переключении в Insert вернулся русский):

$ cat $(which gnome_keyboard_layout)
#!/bin/sh

# Returns the number of current keyboard layout if script is
# running without an argument.
#
# Sets the keyboard layout, if script is running with argument (number
# of keyboard layout).

HELP1="Returns the number of current keyboard layout if script is running without an argument."
HELP2="Sets the keyboard layout, if script is running with argument (number of keyboard layout)."

GET_KL=$(gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().currentSource.index")

if [ "$GET_KL" == "(true, '0')" ]; then
    KL=0
elif [ "$GET_KL" == "(true, '1')" ]; then
    KL=1
elif [ "$GET_KL" == "(true, '2')" ]; then
    KL=2
fi

if [ "$1" == "-h" ]; then
    echo $HELP1
    echo $HELP2
elif [ "$1" == "0" ]; then
    gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources[0].activate()"
elif [ "$1" == "1" ]; then
    gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources[1].activate()"
elif [ "$1" == "2" ]; then
    gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources[2].activate()"
else
    echo $KL
fi