Naprawdę lubię Hot Corners. :-)
Czy w jakiś sposób można uruchomić niestandardowe polecenie w gorącym rogu, jak pokazano poniżej?
Naprawdę lubię Hot Corners. :-)
Czy w jakiś sposób można uruchomić niestandardowe polecenie w gorącym rogu, jak pokazano poniżej?
Odpowiedzi:
Zainstaluj CompizConfig Settings Manager (CCSM). Uruchom w terminalu:
sudo apt-get install compizconfig-settings-manager
Otwórz CCSM.
Wpisz żądane polecenie w jednym z gniazd. Na przykład:
Przejdź do zakładki „Wiązania krawędzi”
Kliknij „Brak” i ustaw żądany gorący narożnik (lub krawędź), który odpowiada właśnie ustawionemu poleceniu
Przesuń mysz do rogu
Teraz twoje polecenie jest uruchomione!
Potwierdzono pracę w dniu 14.04.
Jeśli używasz Unity i masz zainstalowany ccsm, odpowiedź wjandrea jest oczywiście twoją odpowiedzią. Jeśli nie , lub do zastosowania w innych dystrybucjach, przydatna może być lekka alternatywa.
Za pomocą poniższego skryptu możesz ustawić dowolne polecenie, specyficzne dla każdego z twoich hotcornerów.
Jako przykład wykonałem następującą konfigurację:
Oczywiście możesz także sprawić, aby polecenia uruchamiały zewnętrzne skrypty.
Ponadto możesz ustawić rozmiar gorącego rogu w linii:
cornersize = 10
Po prostu zmień wartość (piksele). Skrypt ustawia (kwadratowe) obszary do wyzwalania poleceń:
#!/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
Skrypt potrzebuje xdotool
sudo apt install xdotool
hotcorners2.py
W nagłówku skryptu ustaw swoje polecenia (pamiętaj o cudzysłowach)
commands = [
None,
"gedit",
None,
"gnome-terminal",
]
(następnie górny lewy / prawy, dolny lewy / prawy)
Testuj - uruchom skrypt:
python3 /path/to/hotcorners2.py
Jeśli wszystko działa poprawnie, dodaj do Startup Applications: Dash> Startup Applications> Add. Dodaj polecenie:
/bin/bash -c "sleep 5 && python3 /path/to/hotcorners2.py"
Jeśli użyjemy nieco bardziej zaawansowanych metod obliczeniowych, możemy użyć promienia zamiast kwadratowego obszaru do uruchomienia poleceń (dzięki dobrym starym @pythagoras):
Mała różnica, ale dla zabawy:
#!/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
Jest prawie taki sam. Ustaw swoje polecenia i promień wyzwalania w sekcji head skryptu.
Odpowiedź wjandrea jest najbardziej odpowiednią odpowiedzią dla kogoś, kto używa domyślnego Ubuntu lub Ubuntu Kylin (lub ma compiz jako menedżera wyświetlania), dzięki czemu zyskuje moje uznanie i szacunek. Poniższa odpowiedź może być wykorzystana również w Unity, ale prawdopodobnie byłaby nieco zbędna. Jednak w środowiskach stacjonarnych, które nie mają funkcji compiz, można użyć wskaźnika przedstawionego poniżej. Przetestowałem go krótko w Lubuntu 16.04 VM, więc wiem, że tam działa i uczyniłem go kompatybilnym z Kylin 14.04. W przypadku komputerów stacjonarnych GNOME i MATE musisz najpierw włączyć obsługę AppIndicators, aby użyć dowolnego wskaźnika.
Wdrożyłem, indicator-edger
który pozwala na uruchamianie poleceń zdefiniowanych przez użytkownika na podstawie położenia myszy w dowolnym miejscu wzdłuż 4 krawędzi ekranu. Oryginalna wersja została wykonana w ciągu jednego dnia, w ciągu około 7 godzin, więc jest dość minimalistyczna, ale działa.
Wskaźnik jest kontrolowany przez ~/.edger-commands.json
plik, oczywiście w json
formacie. Może być zapisany ręcznie przez użytkownika lub ustawiony za pomocą DEFINE COMMANDS
opcji wskaźnika . Opcja włączania / wyłączania wyzwalania jest zapamiętywana i zapisywana automatycznie do pliku dla wygody użytkownika. Przykładowy plik konfiguracyjny wyglądałby tak:
{
"right": "gnome-terminal",
"top": "firefox",
"left": "",
"bottom": "gnome-screenshot",
"enabled": true
}
Zanotuj "left"
wpis w pliku. Ta krawędź jest nieustawiona, ale ze względu na json
składnię wymaga tam pustego łańcucha, tzn ""
. Cudzysłowów .
Gdy wskaźnik wykryje, że użytkownik umieścił mysz wzdłuż dowolnej krawędzi (z marginesem ~ 3 pikseli), wskaźnik wyśle powiadomienie bąbelkowe i uruchomi odpowiednie polecenie (jeśli zdefiniowano). Aktywacja wyzwalacza nie powtórzy się, chyba że użytkownik odsunie mysz od krawędzi.
Jak widać na powyższym zrzucie ekranu, wskaźnik ma również wyniki debugowania w wierszu poleceń. Jeśli znajdziesz jakieś błędy, uruchom je z poziomu terminala, dowiedz się, jaki błąd występuje i prześlij odpowiedni raport o błędach na stronie problemów GitHub projektu .
Obecnie nie ma obsługi narożników (tylko krawędzie) i został on stworzony do konfiguracji z jednym monitorem (oczywiście nie można pokryć wszystkich baz w ciągu 7 godzin od utworzenia), ale te funkcje mogą być dostępne w przyszłości.
Kod źródłowy jest dostępny na stronie GitHub projektów lub przez Launchpad . Instalacja odbywa się za pomocą następujących poleceń w terminalu:
sudo add-apt-repository ppa:1047481448-2/sergkolo
sudo apt-get update
sudo apt-get install indicator-edger