Налаштування іншого Unity Launcher для робочої області:
1. 2. 3. 4.
Наведене нижче рішення дозволяє легко мати інший набір піктограм запуску для робочої області, незалежно від кількості робочих просторів.
Установка включає дві частини:
Комбінація клавіш швидкого доступу (одна) для "запам'ятовування" набору іконок запуску для поточної робочої області.
Сценарій для запуску у фоновому режимі, відстежуючи те, що є поточним робочим простором, та встановлюючи відповідний запуск Unity Launcher. Він діє, коли користувач перемикає робочу область.
Як це працює
Задіяні два невеликі сценарії:
Перший скрипт робить одну просту річ: він записує вміст поточної пусковий установки в (прихований) файл у вашому домашньому каталозі, з ім'ям (номером) після поточного робочого простору.
Другий сценарій стежить за те , що поточний робочий простір. Якщо є зміна робочої області , скрипт бачить, чи існує відповідний файл даних (запускається) (створений першим сценарієм). Якщо так, то він читає файл і змінює пусковий механізм Unity, як запам'ятовується у файлі.
Це воно.
Як налаштувати
Сценарій потрібно wmctrl
встановити:
sudo apt-get install wmctrl
Створіть каталог, в якому будуть зберігатися обидва сценарії . Важливо, що обидва сценарії зберігаються разом в одному каталозі, оскільки вони поділяють функціональність і один імпортують з іншого. З тієї ж причини важливо, щоб ви назвали їх точно так, як зазначено нижче.
Скопіюйте кожен із сценаріїв нижче в (інший) порожній файл, збережіть їх у каталозі (створеному в 2.
), точно вказаному як:
set_workspace.py
#!/usr/bin/env python3
import subprocess
import os
workspace_data = os.environ["HOME"]+"/.launcher_data_"
key = ["gsettings get ", "gsettings set ", "com.canonical.Unity.Launcher favorites"]
def get_res():
# get resolution
xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
pos = xr.index("current")
return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]
def current():
# get the current viewport
res = get_res()
vp_data = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
dt = [int(n) for n in vp_data[3].split("x")]
cols = int(dt[0]/res[0])
curr_vpdata = [int(n) for n in vp_data[5].split(",")]
curr_col = int(curr_vpdata[0]/res[0])+1; curr_row = int(curr_vpdata[1]/res[1])
return str(curr_col+curr_row*cols)
def remember_current():
currlauncher = subprocess.check_output(["/bin/bash", "-c", key[0]+key[2]]).decode("utf-8").strip()
f = workspace_data+current()
open(f, "w").write(currlauncher)
if __name__ == "__main__":
remember_current()
launcher_perworkspace.py
#!/usr/bin/env python3
import subprocess
import set_workspace
import time
workspace_data = set_workspace.workspace_data
key = set_workspace.key
def check_datafile(desktop):
f = workspace_data+str(desktop)
try:
new_launcher = open(f).read()
command = key[1]+key[2]+' "'+str(new_launcher)+'"'
subprocess.Popen(["/bin/bash", "-c", command])
except FileNotFoundError:
pass
curr_dt1 = set_workspace.current()
check_datafile(curr_dt1)
while True:
time.sleep(1)
curr_dt2 = set_workspace.current()
if curr_dt2 != curr_dt1:
check_datafile(curr_dt2)
curr_dt1 = curr_dt2
Додайте перший скрипт ( set_workspace.py
) до комбінації клавіш швидкого вибору за вашим вибором: Налаштування системи> "Клавіатура"> "Ярлики"> "Спеціальні ярлики". Клацніть "+" і додайте команду:
python3 /path/to/set_workspace.py
Запустіть комбінацію клавіш і подивіться, чи створений файл .launcher_data_3
у вашому домашньому каталозі типу: Можливо, вам потрібно буде натиснути Ctrl+, Hщоб зробити файл видимим (файли, починаючи з а .
, за замовчуванням невидимі).
Перейдіть по робочих просторах і повторіть процедуру: встановіть комбінацію піктограм запуску і натисніть комбінацію клавіш, щоб "запам'ятати" набір для цієї конкретної робочої області.
Ви практично зараз готові. Тестово запустіть фоновий скрипт за допомогою команди (з вікна терміналу, нехай працює):
python3 /path/to/launcher_perworkspace.py
Якщо все працює добре, і ваш пусковий механізм перемикається на робочу область, додайте таку команду до своїх програм запуску: тире> програми запуску> Додати:
/bin/bash -c "sleep 15&&python3 /path/to/launcher_perworkspace.py"
Примітки
- Якщо ви хочете змінити набір піктограм запуску для певної робочої області, просто перейдіть до робочої області, додайте / видаліть значки, як вам подобається, і натисніть клавішу комбінації (не потрібно перезапускати фоновий скрипт).
- З коментарів (ив) я відчуваю, що в ярлику є певне непорозуміння, щоб запам'ятати поточний запуск для поточної робочої області. Вам потрібна лише одна комбінація клавіш для "збереження" поточного запуску для поточного робочого простору. Він буде працювати точно так само, незалежно від того, на якій робочій області ви знаходитесь. Сам скрипт визначить, що є поточним робочим простором.
Редагувати
З вашого коментаря я розумію, що ви не впевнені, що запускаєте сценарій (и), і боїтесь, що ви зіпсуєте свій поточний запуск.
Я впевнений, що занадто багато (або занадто мало :)) поваги до того, що робиться сценарій. Однак ви можете просто створити резервну копію поточного Unity Launcher за допомогою команди:
printf 'gsettings set com.canonical.Unity.Launcher favorites "' > ~/launcher_output&&printf "$(gsettings get com.canonical.Unity.Launcher favorites)">>~/launcher_output&&printf '"'>>~/launcher_output
Це створить файл ~/launcher_output
, що містить повну команду відновити ваш Unity Launcher до початкової ситуації. У випадку надзвичайної ситуації просто скопіюйте вміст файлу та вставте його в термінал.
Але знову ж таки, навряд чи ви зіпсуєте пускову установку, якщо не змінити сценарій вручну.
ВАЖЛИВО ЗМІСТ (2)
У відповідності з дорученням в коментарі, тим самим версію , яка працює без необхідності використовувати будь-яку комбінацію клавіш; просто запустіть скрипт і почніть налаштувати ваші пускові установки на конкретні робочі області. Сценарій створить (невидимі) файли у вашому домашньому каталозі, щоб запам'ятати ваш набір (Unity-) пускових програм на різних робочих просторах.
Я спробував це у "версії 1" сценарію, але завжди "вбудовування" двох запускових перевірок між двома робочими областями - перевірки виявилися хитрістю, щоб запобігти небажаній поведінці (збереження неправильних даних) при швидкому переміщенні робочих просторів.
Як користуватись
Як і перша версія, цей сценарій використовує wmctrl
:
sudo apt-get install wmctrl
Скопіюйте скрипт у порожній файл, збережіть його як launcher_toworkspace.py
Запустіть його командою:
python3 /path/to/launcher_toworkspace.py
Якщо це працює, як очікувалося, додайте таку команду до своїх програм запуску:
/bin/bash -c "sleep 15&&python3 /path/to/launcher_toworkspace.py"
Сценарій
#!/usr/bin/env python3
import subprocess
import os
import time
datadir = os.environ["HOME"]+"/.config/lswitcher"
if not os.path.exists(datadir):
os.makedirs(datadir)
workspace_data = datadir+"/launcher_data_"
key = [
"gsettings get ",
"gsettings set ",
"com.canonical.Unity.Launcher favorites",
]
def get_launcher():
return subprocess.check_output(
["/bin/bash", "-c", key[0]+key[2]]
).decode("utf-8").strip()
def get_res():
# get resolution
xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
pos = xr.index("current")
return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]
def current():
# get the current viewport
res = get_res()
vp_data = subprocess.check_output(
["wmctrl", "-d"]
).decode("utf-8").split()
dt = [int(n) for n in vp_data[3].split("x")]
cols = int(dt[0]/res[0])
curr_vpdata = [int(n) for n in vp_data[5].split(",")]
curr_col = int(curr_vpdata[0]/res[0])+1
curr_row = int(curr_vpdata[1]/res[1])
return str(curr_col+curr_row*cols)
curr_ws1 = current()
currlauncher1 = get_launcher()
while True:
time.sleep(1)
currlauncher2 = get_launcher()
curr_ws2 = current()
datafile = workspace_data+curr_ws2
if curr_ws2 == curr_ws1:
if currlauncher2 != currlauncher1:
open(datafile, "wt").write(currlauncher2)
else:
if not os.path.exists(datafile):
open(datafile, "wt").write(currlauncher2)
else:
curr_set = open(datafile).read()
command = key[1]+key[2]+' "'+str(curr_set)+'"'
subprocess.Popen(["/bin/bash", "-c", command])
curr_ws1 = curr_ws2
currlauncher1 = get_launcher()
Примітка
Якщо ви налаштуєте робочі простори з попередньою версією сценарію, вони також повинні працювати для цієї версії.
PPA
Відповідно до 2015-04-23, приємне запитання про Деніса Дж та заохочення Парто призвели до створення ppa
сценарію для веб-сайту8 , включаючи GUI для управління ним.
ppa:vlijm/lswitcher
Щоб встановити його, запустіть:
sudo add-apt-repository ppa:vlijm/lswitcher
sudo apt-get update
sudo apt-get install lswitcher
Відтепер він упакований для Trusty & Utopic. Додам інших після тестування. Я також додам .deb
інсталятор, але я б запропонував використовувати ppa
, оскільки зазвичай такі речі оновлюються раз у раз.
Оскільки розташування даних вікна перегляду змінилося з ~/
на ~/.config/lswitcher
, вам доведеться знову налаштувати свій інструмент запуску Unity, якщо ви використовували попередній скрипт.