Как отключить входной язык, переключающийся в терминал

В Ubuntu 12.04 у меня есть два установленные входных языка, английский и русский язык. Я хотел бы отключить использование русского языка в терминале - так, чтобы независимо от выбора в масштабе всей системы, терминал всегда имел английский входной язык.

Это возможно?

Проблема, случайно ввел неанглийские символы, может представить много боли (особенно невидимые).

ОБНОВЛЕНИЕ:

В первую очередь, я хотел бы благодарить всех участников - я действительно взволнован, как быстро люди пытаются помочь!

Похож я должен более ясно заявить проблему. Проблема состоит в том, что не только я хотел бы включить английский язык по умолчанию, когда я создаю новое окно терминала или переключаюсь на старое окно терминала, я также хотел бы сделать невозможное переключение языка из английского языка русскому языку в окне терминала.

Теперь, результаты.

Я попробовал gxneur - похож, нужно создать его из источников, которые я не готов попробовать. Я пытался установить его с Кв. - добираются и не мог выяснить, как легко настроить его. И это не показало значок в панели задач. Таким образом, я удалил его.

Я попробовал сценарий Python, и он сразу останавливается со следующим выводом:

No such schema 'org.gnome.desktop.input-sources'
Traceback (most recent call last):
  File "./set_language.py", line 63, in <module>
    lang_list = read_prev()
  File "./set_language.py", line 52, in read_prev
    currlang = get_lang()
  File "./set_language.py", line 24, in get_lang
    curr_n = int(get(key[1]+key[0]+key[4]).strip().split()[-1])
  File "./set_language.py", line 20, in get
    return subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
  File "/usr/lib/python3.2/subprocess.py", line 522, in check_output
    raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'gsettings get org.gnome.desktop.input-sources current']' returned non-zero exit status 1

Наконец, я попробовал сценарий оболочки, он работает, но, кажется, не работает - я все еще могу легко переключиться на русский язык в терминале. И это также время от времени говорит

No such schema 'org.gnome.desktop.input-sources'

Так, в целом, я не мог сделать ни одну работу решений.

Я предполагаю, что нижняя строка вот - то, что то, что я хотел бы получить, не настолько просто, таким образом, нормально не иметь его.

6
задан 6 January 2017 в 07:19

4 ответа

Объяснение Сценария

#!/bin/bash
# Author: Serg Kolo
# Date: June 16,2015
# Description: Script to ensure terminal 
# always uses english keyboard only

# set -x

PREVIOUS=$(wmctrl -lx | awk -v search=$(printf 0x0%x $(xdotool getactivewindow)) '{ if($1~search) print $3 }' )

while [ 1 ]; do

        # get WM_CLASS of currently active window
        WM_CLASS=$(wmctrl -lx | awk -v search=$(printf 0x0%x $(xdotool getactivewindow)) '{ if($1~search) print $3 }' )
        # echo "WM_CLASS"

        # check if that is gnome-terminal and if it wasn't
        if [ "$WM_CLASS" == "gnome-terminal.Gnome-terminal" ];then
        #  is current window is different class than preious ?
        # (i.e., did we switch from somewhere else)
        #  if yes, switch language
        #  if  we're still in gnome-terminal, do nothing
                if [ "$WM_CLASS" != "$PREVIOUS" ];then
                 # alternative command setxkbmap -layout us
                 gsettings set org.gnome.desktop.input-sources current 0
                fi

        fi

        PREVIOUS=$(echo "$WM_CLASS")
        sleep 0.250
done

на английском языке

сценарий проверяет на в настоящее время активное окно, и если соответствия WM_CLASS тот из gnome-terminal, это переключает входной язык на по умолчанию или индекс 0. Сохраните его как текстовый файл, работайте sudo chmod +x scriptname.sh, и это готово работать.

Этот сценарий требует установки wmctrl программа, которая является ключевой для функциональности сценария. Для установки его работайте sudo apt-get install wmctrl.

, Чтобы заставить его работать непрерывно на каждом входе в систему, добавьте полный путь к сценарию, чтобы Запустить Приложения или создать пользовательский .desktop файл в /home/yourusername/.config/autostart. Изменение на теме использования .desktop файлы ответ Takkat .

Этот сценарий может быть адаптирован различными способами. Зная WM_CLASS Вашей желаемой программы (от вывода wmctrl -lx), можно занять место gnome-terminal.Gnome-terminal любой другой класс программы в if [ "$WM_CLASS" == "string" ];then строка. Можно также установить, какой язык вызвать, путем знания индексов языков (просто считают их вершиной для достижения низшей точки в выпадающем меню, запускающемся в 0 с лучшим), и изменяющийся gsettings set org.gnome.desktop.input-sources current 0. Среди прочего, если Вы добавляете [приблизительно 1 112] операторы, существует возможность вызвать различные языки в различных программах. Сценарий прост и очень гибок.

Объяснение на русском языке

РЎРєСЂРёРїС‚ РІС ‹С€Рµ СЃР» едит Р · окнами РєРѕС ° Р‚ РѕСЂС ‹Рµ акт РёРІРЅС‹, Рё есл Рё РѕРєРЅРѕ РѕС‚ РЅРѕСЃРёС‚ СЃСЏ Рє РєР» ассу gnome-terminal.Gnome-terminal, СЏР · С ‹Рє момент ал СЊРЅРѕ меняет ° СЃСЏ нРангл РёР№СЃРєРёР№.

Р” Р» СЏ С‚ РѕРіРѕ С ‡ С‚ Рѕ Р±С‹ СЌС‚ РѕС‚ СЃРєСЂРёРїС‚ работ ал С‚ ребует СЃСЏ СѓСЃС‚ ° ановкРпрограммы wmctrl - СЌС‚ Рѕ самая важная С ‡ аст СЊ, РєРѕС‚ РѕСЂСѓСЋ можно СѓСЃС‚ ановит СЊ СЃ командой sudo apt-get isntall wmctrl.

Р” Р» СЏ С‚ РѕРіРѕ С ‡ С‚ Рѕ Р±С‹ СЌС‚ РѕС‚ СЃРєСЂРёРїС‚ работ ал авт омат РёС ‡ ески, СЃРѕС … ранит Рµ РІ каком-С‚ Рѕ С „айл Рµ (нРпример СЃ именем myscript.sh °), поменяйт Рµ раР· решения СЌС‚ РѕРіРѕ С „айл Р СЃ командой sudo chmod +x /full/path/to/myscript.sh ° (РіРґРµ/full/path/to/myscript.sh СЌС‚ Рѕ РїРѕР» РЅС ‹Р№ аддресс РіРґРµ РЅР°С … РѕРґРёС‚ СЃСЏ С „айл), Рё добавьт Рµ РїРѕР» РЅС ‹Р№ аддресс Рє СЌС‚ РѕРјСѓ СЃРєСЂРёРїС‚ ° Сѓ как РѕРґРЅР РёР · Приложения запуска. Ил Рё же можно СЃРѕР · дат СЊ .desktop С „айл.

Р-С‚ РѕС‚ СЃРєСЂРёРїС‚ можно адапт ироват СЊ РїРѕРґ РґСЂСѓРіРёРµ программы. РџСЂРѕСЃС‚ Рѕ СѓР · найт асс Сѓ С Рµ какой РєР»‚ РѕР№ программы РїСЂРё промощи команды wmctrl -lx - СЌС‚ Рѕ С‚ рет РёР№ СЃС‚ РѕР» Р±РёРє РІ реР· СѓР» СЊС‚ ат Рµ. Р • СЃР» Рё ест СЊ жел ание, можно добавит СЊ РґСЂСѓРіРёРµ программы СЃ прибавл ением РєРѕРЅСЃС‚ рукции else if

Источники:

https://askubuntu.com/a/414041/295286

2
ответ дан 23 November 2019 в 07:43

Единственным путем я знаю, должен использовать gxneur.

Это - багги в Ubuntu для автоматического расположения переключения, но хорошо для подобных настроек. Автоматическое переключение может быть легко отключено.

можно установить там приложения, как терминал гнома, для имения единственного расположения.

можно читать ЭТА ТЕМА на русском языке gxneur специалистом по обслуживанию.

, Но я также буду счастлив, если будет лучший путь.

1
ответ дан 23 November 2019 в 07:43

Внезапно я нашел очень простое решение, которое не требует написания сценариев.

Вы можете щелкнуть индикатор языка, выбрать «Настройки ввода текста ...».

В открывшемся окне установите флажок «Разрешить разные источники для каждого окна» и

«В новом окне используйте источник по умолчанию».

enter image description here

Если макет по умолчанию английский, каждое вновь открытое приложение будет запускаться с макетом на английском языке, включая терминал.

1
ответ дан 23 November 2019 в 07:43

Примечание по ответу ниже

Ответ был первоначально записан для 14,04, но переписан 6 января 2017, чтобы также продолжить работать (по крайней мере) 16,04 и 16.10. wmctrl больше не необходим.


Сценарий для автоматической установки другого языка для отдельного приложения.

enter image description here enter image description here

Что это делает

  • Запуская скрипт в фоновом режиме, пользователь может установить другой язык для определенного приложения (в этом случае gnome-terminal). Просто запустите скрипт и, с приложением впереди, установите желаемый язык.
  • Язык будут помнить, в сценарии (при выполнении), а также в скрытом файле, чтобы помниться на следующем разе выполнения сценария (на перезапуске компьютера).
  • Если пользователь устанавливает фокус на другое приложение, переключатели сценария назад на язык по умолчанию, независимо от того, что это было. Также язык по умолчанию будут помнить, но пользователь может изменить его любое время (также измененный язык помнят),

Примечания

  • Сценарий использует расширенный набор инструментов (функции), чтобы принять во внимание, что пользователь должен смочь изменить набор используемых языков, и языки нужно помнить, как предложено в комментарии (комментариях). Тем не менее, это очень "легко", так как это только использует функцию (функции), когда это необходимо.

Сценарий

#!/usr/bin/env python3
import subprocess
import time
import os
import ast

#--- set the "targeted" exceptional application below
app = "gnome-terminal"
#---

l_file = os.path.join(os.environ["HOME"], app+"_lang")
def_lang = os.path.join(os.environ["HOME"], "def_lang")
k = ["org.gnome.desktop.input-sources", "current", "sources"]

def get(cmd):
    # helper function
    try:
        return subprocess.check_output(cmd).decode("utf-8").strip()
    except subprocess.CalledProcessError:
        pass

def run(cmd):
    # helper function
    subprocess.Popen(cmd)

def front():
    # see if app has active window
    front = get(["xdotool", "getactivewindow"])
    data = get(["xprop", "-id", front])
    if all([front, data]):
        return app in get(["xprop", "-id", front])
    else:
        pass

def getlang():
    # get the currently set language (from index, in case the sources are changed)
    currindex = int(get(["gsettings", "get", k[0], k[1]]).split()[-1])
    return sources[currindex]

def get_stored(file):
    # read the set language
    return sources.index(ast.literal_eval(open(file).read().strip()))

def get_sources():
    return ast.literal_eval(get(["gsettings", "get", k[0], k[2]]))

sources = get_sources()
appfront1 = None
currlang1 = getlang()

while True:
    time.sleep(1)
    appfront2 = front()
    if appfront2 != None:
        currlang2 = getlang()
        # change of frontmost app (type)
        if appfront2 != appfront1:
            if appfront2:
                try:
                    run(["gsettings", "set", k[0], k[1], str(get_stored(l_file))])
                except FileNotFoundError:
                    open(l_file, "wt").write(str(currlang2))
            elif not appfront2:
                try:
                    run(["gsettings", "set", k[0], k[1], str(get_stored(def_lang))])
                except FileNotFoundError:
                    open(def_lang, "wt").write(str(currlang2))
        elif currlang2 != currlang1:
            f = l_file if appfront2 else def_lang
            open(f, "wt").write(str(currlang2))

        appfront1 = appfront2
        currlang1 = currlang2

Как использовать

  1. Использование сценария xdotool:

    sudo apt-get install xdotool
    
  2. Скопируйте сценарий выше в пустой файл, сохраните его как set_language.py

  3. Тестовый прогон это командой:

    python3 /path/to/set_language.py
    

    При запущении скрипта:

    • установите язык (по умолчанию).
    • откройте (гном-) терминал, установите язык, который будет использоваться с терминалом
    • Переключатель между двумя и видит, переключается ли язык автоматически.


    Можно изменить оба языка по умолчанию как терминальный язык в любое время. Язык (языки) набора будут помнить.

  4. Если все работы как ожидалось, добавляет это для Запущения Приложений: Добавьте к Приложениям Запуска: Тире> Приложения Запуска> Добавляет. Добавьте команду:

    python3 /path/to/set_language.py
    

Объяснение, короткая (концептуальная) история:

Сценарий использует два файла, для хранения языков набора и для языка по умолчанию и для языка, используемого в исключительном приложении (gnome-terminal в этом случае, но можно установить любое приложение).

Сценарий затем периодически (однажды в секунду) делает два теста:

  1. Если активное окно принадлежит исключительному приложению
  2. Что в настоящее время входной язык набора

Сценарий сравнивает ситуацию с тестом (тестами) одну секунду назад. Затем, если:

  1. в приложении было изменение:

    исключительный-> значение по умолчанию: считайте файл языка для языка по умолчанию и установите язык. Если файл не существует (струя), создает ее, сохраните текущий язык как значение по умолчанию.
    значение по умолчанию-> исключительный: наоборот.

  2. Если было изменение на языке (но не в классе окна):

    Мы можем предположить, что пользователь установил другой язык или для исключительного приложения или для входного языка по умолчанию->, вписывают в в настоящее время используемый входной язык согласно файлу (или для языка по умолчанию или для исключительного языка).

3
ответ дан 23 November 2019 в 07:43

Другие вопросы по тегам:

Похожие вопросы: