Ubuntu 12.04では、英語とロシア語の2つの入力言語がインストールされています。ターミナルでロシア語の使用を無効にしたいので、システム全体の選択に関係なく、ターミナルは常に英語の入力言語を使用します。
それは可能ですか?
問題は、誤って入力された英語以外の文字が多くの痛みをもたらす可能性があることです(特に目に見えないもの)。
更新:
まず第一に、私はすべての参加者に感謝したいと思います-人々がどれだけ早く助けようとするか、本当に興奮しています!
問題をより明確に述べなければならないようです。問題は、新しいターミナルウィンドウを作成するとき、または古いターミナルウィンドウに切り替えるときにデフォルトで英語をオンにしたいだけでなく、ターミナルウィンドウ内で言語を英語からロシア語に切り替えられないようにしたいことです。
さて、結果。
私はgxneurを試しました-ソースからビルドする必要があるようですが、試してみる準備はできていません。 apt-getでインストールしようとしましたが、簡単に設定する方法がわかりませんでした。また、タスクバーにアイコンが表示されませんでした。だから私はそれを削除しました。
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'
だから、すべてのすべてで、私はソリューションのいずれかを動作させることができませんでした。
ここで一番下の行は、私が取得したいものはそれほど単純ではないので、それを持っていなくても大丈夫だと思います。
答えはもともと14.04向けに書かれていましたが、2017年1月6日に書き直され、(少なくとも)16.04と16.10でも動作するようになりました。 wmctrl
は不要になりました。
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
スクリプトはxdotool
を使用します。
Sudo apt-get install xdotool
上記のスクリプトを空のファイルにコピーし、set_language.py
として保存します
次のコマンドでテスト実行します。
python3 /path/to/set_language.py
スクリプトの実行中:
デフォルト言語の両方を端末言語としていつでも変更できます。設定した言語が記憶されます。
すべてが期待どおりに機能する場合は、スタートアップアプリケーションに追加します:スタートアップアプリケーションに追加します:ダッシュ>スタートアップアプリケーション>追加。コマンドを追加します。
python3 /path/to/set_language.py
このスクリプトは2つのファイルを使用して、デフォルト言語と例外アプリケーションで使用される言語の両方の設定言語を保存します(この場合はgnome-terminal
ですが、任意のアプリケーションを設定できます)。
その後、スクリプトは定期的に(1秒間に1回)2つのテストを実行します。
スクリプトは、状況を1秒前のテストと比較します。それから:
アプリケーションに変更がありました:
exceptional-> default:デフォルト言語の言語ファイルを読み取り、言語を設定します。ファイルが存在しない場合(jet)、作成し、現在の言語をデフォルトとして保存します。
default-> exception:その逆。
言語に変更があった場合(ただし、ウィンドウクラスにはない場合):
ユーザーが例外アプリケーションまたはデフォルトの入力言語のいずれかに対して異なる言語を設定したと仮定することができます->現在使用されている入力言語を対応するファイルに書き込みます(デフォルト言語または例外言語のいずれか)。
突然、スクリプトを必要としない非常に簡単なソリューションが見つかりました。
言語インジケータをクリックして、「テキスト入力設定...」を選択できます。
開いたウィンドウで、「ウィンドウごとに異なるソースを許可する」をチェックし、
「新しいウィンドウはデフォルトのソースを使用します」。
デフォルトのレイアウトが英語の場合、新しく開かれた各アプリケーションは、ターミナルを含む英語のレイアウトで開始されます。
私が知っている唯一の方法は、gxneurを使用することです。
Ubuntuの自動切り替えレイアウトにはバグがありますが、この種の設定には適しています。自動切り替えは簡単に無効にできます。
Gnome-terminalなどのアプリケーションを単一のレイアウトに設定できます。
Gxneurメンテナーがロシア語で このトピック を読むことができます。
しかし、もっと良い方法があれば、私も幸せになります。