Unityでカスタムコマンドを実行するようにホットコーナーを設定できますか?


13

Hot Cornersが大好きです。:-)

以下に示すように、ホットコーナーでカスタムコマンドを実行することはどういうわけですか?

ここに画像の説明を入力してください


特にホットコーナーでは(少なくともUnityが使用する方法では)可能性はないと思いますが、画面の特定の領域にマウスを置いたときにスクリプトをトリガーすることは可能です。たとえば、askubuntu.com / a / 758307/295286、マウスオーバーアクションセクションをご覧ください。ホットコーナーについて詳しく調べますが、うまくいかない場合は、カスタムスクリプトで問題ありませんか?
セルギーコロディアズニー

マルチモニターまたはシングル?
ジェイコブVlijm

こんにちはorschiro、投稿。すべてが明確である(またはそうでない)場合に言及してください。
ジェイコブVlijm

ねえ、答えよりもホットコーナーが多いと思う。あなたはいくつを好むでしょうか?
ジェイコブVlijm

2
@ JacobVlijm、Serg、私の答えをご覧ください。
wjandrea

回答:


10

CCSM

  1. CompizConfig Settings Manager(CCSM)をインストールします。ターミナルで実行:

    sudo apt-get install compizconfig-settings-manager
  2. CCSMを開きます。

  3. 「コマンド」に移動
  4. スロットの1つに目的のコマンドを入力します。例えば:

    CCSMスクリーンショット-コマンド

  5. 「エッジバインディング」タブに移動します

  6. [なし]をクリックし、設定したコマンドに対応する目的のホットコーナー(またはエッジ)を設定します。

    CCSMスクリーンショット-ホットコーナー

  7. マウスを隅に移動します

  8. これでコマンドが実行されました!

    CCSMスクリーンショット-実行中のコマンド

14.04での作業を確認しました。


すべての提案されたソリューションの中で最も簡単。必要なコマンドは、compizコマンドがそのスクリプトを指すようにするか、スクリプトが$ PATHのbinフォルダーにある場合は単にscriptnameを指すようにするよりも、スクリプトを介してよりよく実現します。唯一の可能性のある欠点は、統一/ compizが、ユーザーセットコマンド、つまり統合されていないコマンドをランダムに「失う」ことが知られていることです。ユーザーコマンドを統合する方法は、この質問の範囲外です。
ダグ

@wjandreaしたがって、結局実装されています。Compizは私を驚かせることはありません。良い答え、OPが求めるものに最もふさわしい。+ 1'ed
Sergiy Kolodyazhnyy

残念ながら、あなたは正しいです、ハハ。はい、まさにOPが求めたものです。
ジェイコブVlijm

編集と回答で何度も私を助けてくれました。ole'Sergが言っていたように「クッキー」を持っている...確かに半ダースがあります:)
WinEunuuchs2Unix

6

カスタムコマンド

Unity 使用ていて、ccsmがインストールされている場合、wjandreaの答えはもちろんあなたの答えです。そうでない場合、または他のディストリビューションで使用する場合は、軽量の代替手段が役立つ場合があります。

以下のスクリプトを使用すると、各ホットコーナーに固有のコマンドを設定できます。

例として、次のセットアップを行いました。

  • 左上 アクションなし
  • 右上 の実行Geditの
  • 左下 アクションなし
  • 右下の Gnomeターミナルを実行

もちろん、コマンドに外部スクリプトを実行させることもできます。

さらに、行のホットコーナーのサイズを設定できます。

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

セットアップ

  1. スクリプトが必要 xdotool

    sudo apt install xdotool
  2. スクリプトを空のファイルにコピーし、iとして保存します hotcorners2.py
  3. スクリプトの先頭で、コマンドを設定します(引用符に注意してください)

    commands = [
        None,
        "gedit",
        None,
        "gnome-terminal",
    ]

    (続いて左上/右、左下/右)

  4. スクリプトのテスト実行:

    python3 /path/to/hotcorners2.py
  5. すべてが正常に機能する場合は、スタートアップアプリケーションに追加します:[ダッシュ]> [スタートアップアプリケーション]> [追加]。コマンドを追加します。

    /bin/bash -c "sleep 5 && python3 /path/to/hotcorners2.py"

ノート

  • スクリプトは現在(最初の)画面で実行されます。簡単に編集して、複数の画面を処理したり、画面ごとに異なることをしたりすることもできます。
  • 少数の人々がそれを好めば、私達は便利な使用法および容易なインストールのためにguiおよびppaを追加できます。

編集

もう少し高度なコンピューティングを使用する場合は、正方形の領域の代わりに半径を使用してコマンドをトリガーできます(古き良き@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セクションで、コマンドとトリガーする半径を設定します。


5

注意:

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.