回答:
CompizConfig Settings Manager(CCSM)をインストールします。ターミナルで実行:
sudo apt-get install compizconfig-settings-manager
CCSMを開きます。
スロットの1つに目的のコマンドを入力します。例えば:
「エッジバインディング」タブに移動します
[なし]をクリックし、設定したコマンドに対応する目的のホットコーナー(またはエッジ)を設定します。
マウスを隅に移動します
これでコマンドが実行されました!
14.04での作業を確認しました。
Unity を使用していて、ccsmがインストールされている場合、wjandreaの答えはもちろんあなたの答えです。そうでない場合、または他のディストリビューションで使用する場合は、軽量の代替手段が役立つ場合があります。
以下のスクリプトを使用すると、各ホットコーナーに固有のコマンドを設定できます。
例として、次のセットアップを行いました。
もちろん、コマンドに外部スクリプトを実行させることもできます。
さらに、行のホットコーナーのサイズを設定できます。
cornersize = 10
値(ピクセル)を変更するだけです。スクリプトは、コマンドをトリガーするために(正方形の)エリアを設定します。
#!/usr/bin/env python3
import subprocess
import time
cornersize = 20
commands = [
None,
"gedit",
None,
"gnome-terminal",
]
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
def get_pos():
return [int(s.split(":")[1]) for s in get(["xdotool", "getmouselocation"]).split()[:2]]
scrdata = get("xrandr").split(); resindex = scrdata.index("connected")+2
res = [int(n) for n in scrdata[resindex].split("+")[0].split("x")]
match1 = None
while True:
time.sleep(1)
xy = get_pos()
x = xy[0]; y = xy[1]
test = [
[x < cornersize, y < cornersize],
[x > res[0]-cornersize, y < cornersize],
[x < cornersize, y > res[1]-cornersize],
[x > res[0]-cornersize, y > res[1]-cornersize],
]
match2 = [i for i, p in enumerate(test) if all(p)]
if match2 != match1:
if match2:
cmd = commands[match2[0]]
if cmd:
subprocess.Popen(["/bin/bash", "-c", cmd])
match1 = match2
スクリプトが必要 xdotool
sudo apt install xdotool
hotcorners2.py
スクリプトの先頭で、コマンドを設定します(引用符に注意してください)
commands = [
None,
"gedit",
None,
"gnome-terminal",
]
(続いて左上/右、左下/右)
スクリプトのテスト実行:
python3 /path/to/hotcorners2.py
すべてが正常に機能する場合は、スタートアップアプリケーションに追加します:[ダッシュ]> [スタートアップアプリケーション]> [追加]。コマンドを追加します。
/bin/bash -c "sleep 5 && python3 /path/to/hotcorners2.py"
もう少し高度なコンピューティングを使用する場合は、正方形の領域の代わりに半径を使用してコマンドをトリガーできます(古き良き@pythagorasに感謝します)。
小さな違いですが、楽しみのためだけに:
#!/usr/bin/env python3
import subprocess
import math
import time
# set distance (hotcorner sensitivity)
radius = 20
# top-left, top-right, bottom-left, bottom-right
commands = [
None,
"gedit",
None,
"gnome-terminal",
]
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
def get_pos():
return [int(s.split(":")[1]) for s in get(["xdotool", "getmouselocation"]).split()[:2]]
# get the resolution
scrdata = get("xrandr").split(); resindex = scrdata.index("connected")+2
res = [int(n) for n in scrdata[resindex].split("+")[0].split("x")]
# list the corners, could be more elegant no doubt
corners = [[0, 0], [res[0], 0], [0, res[1]], [res[0], res[1]]]
match1 = None
while True:
time.sleep(1)
pos = get_pos()
# get the current difference from the mousepointer to each of the corner (radius)
diff = [int(math.sqrt(sum([(c[i]-pos[i])**2 for i, n in enumerate(res)])))\
for c in corners]
# see if any of the corners is "approached" within the radius
match2 = [diff.index(n) for n in diff if n < radius]
# if so, and the corresponding command is not set to None, run it.
if all([match2 != match1, match2]):
cmd = commands[match2[0]]
if cmd:
subprocess.Popen(["/bin/bash", "-c", cmd])
match1 = match2
ほぼ同じです。スクリプトのheadセクションで、コマンドとトリガーする半径を設定します。
wjandreaの答え は、デフォルトのUbuntuまたはUbuntu Kylinを使用している(またはディスプレイマネージャーとしてcompizを持っている)人に最も適した答えです。したがって、それは私の賛成と尊敬を得ます。以下に示す回答は、Unityでも使用できますが、おそらく多少冗長になります。ただし、compizがないデスクトップ環境では、以下に示すインジケーターを使用できます。Lubuntu 16.04 VMで簡単にテストしたので、そこで動作することがわかっており、Kylin 14.04と互換性があります。GNOMEおよびMATEデスクトップの場合、インジケーターを使用するには、最初にAppIndicatorsを有効にする必要があります。
indicator-edger
画面の4つの端に沿ったマウスの位置に基づいて、ユーザー定義のコマンドをトリガーできるように実装しました。元のバージョンは約7時間で1日以内に作成されたため、かなり最小限に抑えられていますが、機能します。
~/.edger-commands.json
インディケーターはfile を介して、明らかにjson
フォーマットで制御されます。ユーザーが手動で書き込むか、インジケータのDEFINE COMMANDS
オプションで設定できます。トリガーの有効化/無効化オプションは記憶され、ユーザーの利便性のためにファイルに自動的に書き込まれます。サンプル構成ファイルは次のようになります。
{
"right": "gnome-terminal",
"top": "firefox",
"left": "",
"bottom": "gnome-screenshot",
"enabled": true
}
"left"
ファイルのエントリに注意してください。そのエッジは設定されていませんが、json
構文上、空の文字列、つまりquotesが必要""
です。
ユーザーがマウスを任意のエッジに沿って(〜3ピクセルのマージンで)配置したことをインジケーターが検出すると、インジケーターはバブル通知を送信し、適切なコマンド(定義されている場合)を実行します。ユーザーがマウスをエッジから離さない限り、トリガーの起動は繰り返されません。
上記のスクリーンショットからわかるように、インジケーターのコマンドラインにはデバッグ出力もあります。バグを見つけたら、端末から実行して、発生したエラーを見つけ、プロジェクトのGitHubの問題ページで適切なバグレポートを送信してください。
現在、コーナー(エッジのみ)のサポートはなく、1モニターセットアップ用に構築されています(明らかに、作成から7時間以内にすべてのベースをカバーすることはできません)が、それらの機能は将来的に利用可能になる可能性があります。
ソースコードは、プロジェクトのGitHubページまたはLaunchpadから入手できます。ターミナルで次のコマンドを使用してインストールを実行します。
sudo add-apt-repository ppa:1047481448-2/sergkolo
sudo apt-get update
sudo apt-get install indicator-edger