Мне действительно нравятся Горячие Углы.:-)
Так или иначе возможно выполнить пользовательскую команду на горячем углу как показано ниже?
менеджер по Настройкам CompizConfig (CCSM). Выполненный в терминале:
sudo apt-get install compizconfig-settings-manager
Открывают CCSM.
, Вводят Вашу желаемую команду в один из слотов. Например:
Переходят к вкладке
"Edge Bindings", Нажимают "None" и устанавливают Ваш желаемый горячий угол (или край), который соответствует команде, которую Вы просто устанавливаете
Перемещение Ваша мышь к углу
Теперь, Ваша команда выполняется!
Подтвержденная работа над 14,04.
Если Вы используете Единицу и имеете установленный ccsm, ответ wjandrea является Вашим ответом, конечно. В противном случае или использовать на других дистрибутивах, альтернатива легкого веса могла бы быть полезной.
Со сценарием ниже, можно установить любую команду, характерную для каждого из hotcorners.
Как пример, я сделал следующую установку:
Конечно, можно также заставить команды запустить внешние скрипты.
Кроме того, можно установить размер горячего угла в строке:
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",
]
(впоследствии верхний левый/righ, левая нижняя часть / право)
Тестовый прогон сценарий:
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
В значительной степени то же. Установите свои команды и радиус для инициирования, в главном разделе сценария.
ответ wjandrea является самым подходящим ответом для кого-то, кто использует Ubuntu по умолчанию или Ubuntu Kylin (или имеет compiz в качестве их менеджера по оформлению), таким образом это получает мой upvote и уважение. Ответ, предоставленный ниже, может использоваться на Единице также, но вероятно был бы немного избыточен. Однако на настольных средах, которые не имеют compiz, можно использовать индикатор, представленный ниже. Я протестировал его кратко в Lubuntu 16.04 VM, таким образом, я знаю, что это работает там и сделало это совместимым с Kylin 14.04 также. Для GNOME и рабочих столов ПОМОЩНИКА, Вы должны будете иметь поддержку AppIndicators, включенного сначала для использования любого индикатора.
Я реализовал indicator-edger
который позволяет инициировать пользовательские команды на основе положения мыши где угодно вдоль 4 краев экрана. Исходная версия была сделана в течение одного дня приблизительно за 7 часов, таким образом это является довольно минималистическим, но делает задание.
Через индикатор управляют ~/.edger-commands.json
файл, очевидно, в json
формат. Это может быть записано вручную пользователем или установлено через индикатор DEFINE COMMANDS
опция. Позволять/запрещать опцию инициирования помнят и пишут автоматически в файл для удобства пользователя. Демонстрационный конфигурационный файл был бы похож так:
{
"right": "gnome-terminal",
"top": "firefox",
"left": "",
"bottom": "gnome-screenshot",
"enabled": true
}
Отметьте "left"
запись в файле. Тот край сброшен, но из-за json
синтаксис это требует наличия пустой строки там, т.е. кавычек ""
.
После того как индикатор обнаруживает того пользователя, поместил мышь вдоль любого из краев (с полем на ~3 пикселя), индикатор отправит пузырьковое уведомление и выполнит соответствующую команду (если определено). Активация триггера не повторится, если пользователь не отодвинет мышь от края.
Как Вы видите из снимка экрана выше, индикатор также имеет отладочную информацию в командной строке. При нахождении каких-либо ошибок не стесняйтесь выполнять его от терминала, узнавать, какая ошибка происходит, и отправьте соответствующий отчет об ошибках на странице проблем GitHub проекта.
В настоящее время нет никакой поддержки углов (только края), и это было создано для установки с одним монитором (очевидно, нельзя покрыть все основания в течение 7 часов после создания), но те функции могли бы быть доступными в конечном счете в будущем.
Исходный код доступен в проектах страница GitHub или через Панель запуска. Установка выполняется через следующие команды в терминале:
sudo add-apt-repository ppa:1047481448-2/sergkolo
sudo apt-get update
sudo apt-get install indicator-edger