Мне очень нравятся горячие уголки. : -)
Как-то можно запустить пользовательскую команду в горячем уголке, как показано ниже?
Если вы используете 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
sudo apt install xdotool
Скопируйте сценарий в пустой файл, сохраните i как hotcorners2.py. В начале скрипта задайте свои команды (вспомните кавычки) commands = [
None,
"gedit",
None,
"gnome-terminal",
]
(впоследствии верхний левый / средний, нижний левый / правый) Проверить сценарий: python3 /path/to/hotcorners2.py
Если все работает нормально, добавьте в приложения для запуска: Dash> Startup Applications> Add. Добавьте команду: /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
В значительной степени то же самое. Задайте свои команды и радиус запуска в разделе главы скрипта.
ответ wjandrea является наиболее подходящим ответом для тех, кто использует Ubuntu по умолчанию или Ubuntu Kylin (или имеет compiz в качестве своего диспетчера дисплея), таким образом, он получает мое преимущество и уважение. Ответ, приведенный ниже, может быть использован и для Unity, но, вероятно, будет немного лишним. Однако в среде рабочего стола, где нет компилятора, можно использовать индикатор, представленный ниже. Я кратко протестировал его в Lubuntu 16.04 VM, поэтому я знаю, что он работает там и совместил его с Kylin 14.04.
Я реализовал indicator-edger, что позволяет запускать пользовательские команды на основе положения мыши в любом месте по 4 краям экрана. Первоначальная версия была сделана в течение одного дня, примерно через 7 часов, поэтому она довольно минималистична, но делает работу.
Индикатор управляется файлом ~/.edger-commands.json, очевидно, в формате json. Он может быть написан вручную пользователем или установлен через опцию DEFINE COMMANDS индикатора. Опция включения / отключения триггера запоминается и записывается автоматически для удобства пользователя. Пример файла конфигурации будет таким:
{
"right": "gnome-terminal",
"top": "firefox",
"left": "",
"bottom": "gnome-screenshot",
"enabled": true
}
Обратите внимание на запись "left" в файле. Этот край не установлен, но из-за синтаксиса json он требует наличия пустой строки, т. Е. Кавычки "".
Как только индикатор обнаруживает, что пользователь поместил мышь вдоль любого из краев (с ~ 3 пикселя), индикатор отправит уведомление о пузыре и запустит соответствующую команду (если она определена).
Как вы можете видеть на скриншоте выше, индикатор также имеет отладочный вывод в командная строка. Если вы обнаружите какие-либо ошибки, не стесняйтесь запускать их с терминала, узнайте, что происходит с ошибкой, и отправьте соответствующий отчет об ошибке на .
В настоящее время нет поддержки углов ( только ребра), и он был создан для настройки с одним монитором (очевидно, нельзя покрыть все базы в течение 7 часов после создания), но эти функции могут быть доступны в будущем в будущем.
Исходный код доступен на странице проектов GitHub или через Launchpad. Установка выполняется с помощью следующих команд в терминале:
sudo add-apt-repository ppa:1047481448-2/sergkolo
sudo apt-get update
sudo apt-get install indicator-edger