Unity에서 커스텀 명령을 실행하도록 핫 코너를 설정할 수 있습니까?


13

나는 핫 코너를 정말로 좋아한다. :-)

아래 그림과 같이 핫 코너에서 사용자 정의 명령을 실행할 수 있습니까?

여기에 이미지 설명을 입력하십시오


나는 핫 코너가 구체적으로 가능하지 않다고 생각하지만 (적어도 Unity가 사용하는 방식으로는 그렇지는 않습니다) 마우스가 화면의 특정 영역에 배치되면 스크립트를 트리거 할 수 있습니다. 예를 들어 askubuntu.com/a/758307/295286 , 마우스 오버 동작 섹션을 참조하십시오 . 핫 코너에 대해 더 자세히 살펴볼 것입니다. 그래도 해결되지 않으면 사용자 지정 스크립트는 괜찮습니까?
Sergiy Kolodyazhnyy

다중 모니터 또는 단일?
Jacob Vlijm

안녕하세요 orschiro가 게시했습니다. 모든 것이 명확하거나 아닌지 언급하십시오.
Jacob Vlijm

내 대답보다 여기에 핫 코너가 더 많다는 것을 알았습니다. 당신은 얼마나 많은 것을 선호합니까?
Jacob Vlijm

2
@JacobVlijm, Serg, 내 대답을 참조하십시오.
wjandrea

답변:


10

CCSM

  1. CCSM (CompizConfig Settings Manager)을 설치하십시오. 터미널에서 실행하십시오.

    sudo apt-get install compizconfig-settings-manager
  2. CCSM을 엽니 다.

  3. "명령"으로 이동
  4. 슬롯 중 하나에 원하는 명령을 입력하십시오. 예 :

    CCSM 스크린 샷-명령

  5. "가장자리 바인딩"탭으로 이동

  6. "없음"을 클릭하고 방금 설정 한 명령에 해당하는 원하는 핫 코너 (또는 모서리)를 설정하십시오.

    CCSM 스크린 샷-핫 코너

  7. 마우스를 모퉁이로 이동

  8. 이제 당신의 명령이 실행됩니다!

    CCSM 스크린 샷-명령 실행

14.04에 대한 작업을 확인했습니다.


제안 된 모든 솔루션 중 가장 쉽습니다. 스크립트를 통해보다 나은 명령을 구현하려면 compiz 명령이 해당 스크립트를 가리 키도록하거나 스크립트가 $ PATH의 bin 폴더에있는 경우 scriptname 만 지정하십시오. 가능한 단점은 단일성 / 컴 피지 스는 사용자 설정 명령, 즉 통합되지 않은 명령을 무작위로 잃어버린 것으로 알려져 있습니다. 사용자 명령을 통합하는 방법은이 질문의 범위를 벗어납니다.
doug

@wjandrea 그래서 결국 구현됩니다. Compiz는 나를 놀라게하지 않습니다. 좋은 답변, OP가 추구하는 것에 가장 적합합니다. +
1'ed

불행히도 네 말이 맞아 예, OP가 요청한 내용과 정확히 일치합니다.
Jacob Vlijm

편집 및 답변을 통해 몇 번이나 도와 주셨습니다. ole'Serg가 말한대로 "쿠키"를 가지고 있습니다 ... 실제로 반 다스 :)
WinEunuuchs2Unix

6

사용자 명령

Unity를 사용 하고 ccsm을 설치 한 경우, wjandrea의 대답은 물론 대답입니다. 그렇지 않거나 다른 배포판에서 사용하는 경우 간단한 대안이 유용 할 수 있습니다.

아래의 스크립트로, 당신은 설정할 수 있는 사용자의 hotcorners 각각 명령, 특정합니다.

예를 들어 다음과 같이 설정했습니다.

  • 왼쪽 위 조치 없음
  • 오른쪽 위 실행 Gedit
  • 왼쪽 하단 조치 없음
  • 오른쪽 하단 실행 그놈 터미널

물론 명령을 외부 스크립트로 실행할 수도 있습니다.

또한 라인의 핫 코너 크기 를 설정할 수 있습니다 .

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

용법

거의 동일합니다. 스크립트의 헤드 섹션에서 명령과 트리거 할 반경을 설정하십시오.


5

노트:

wjandrea의 답변 은 기본 Ubuntu 또는 Ubuntu Kylin을 사용하거나 디스플레이 관리자로 compiz가있는 사람에게 가장 적합한 답변이므로 내지지와 존경을 얻습니다. 아래에 제공된 답변은 Unity에서도 사용할 수 있지만 약간 중복 될 수 있습니다. 그러나 경합이없는 데스크탑 환경에서는 아래 제시된 표시기를 사용할 수 있습니다. 나는 그것을 Lubuntu 16.04 VM에서 간단히 테스트 했으므로 거기에서 작동한다는 것을 알고 Kylin 14.04 와도 호환됩니다. 그놈 및 MATE 데스크탑의 경우 표시기를 사용하려면 먼저 AppIndicators를 지원해야합니다.

소개

indicator-edger화면의 4 가장자리를 따라 마우스 위치를 기반으로 사용자 정의 명령을 트리거 할 수 있도록 구현했습니다 . 원본 버전은 하루에 약 7 시간 만에 완료되었으므로 최소한의 작업을 수행합니다.

여기에 이미지 설명을 입력하십시오

표시기는 ~/.edger-commands.json분명히 파일 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.