Установка другого Unity Launcher для рабочей области:
1. 2. 3. 4.
Приведенное ниже решение позволяет легко иметь различный набор значков запуска для каждого рабочего пространства, независимо от того, сколько рабочих пространств у вас есть.
Установка состоит из двух частей:
(Одна) комбинация сочетаний клавиш для «запоминания» набора значков запуска для текущей рабочей области.
Скрипт, запускаемый в фоновом режиме, отслеживающий текущее рабочее пространство и устанавливающий соответствующий модуль запуска Unity. Он действует всякий раз, когда пользователь переключает рабочее пространство.
Как это устроено
Два небольших сценария участвуют:
Первый скрипт делает одну простую вещь: он записывает содержимое текущей пусковой установки в (скрытый) файл в вашем домашнем каталоге, с именем (номером) после текущего рабочего пространства.
Второй сценарий следит за то , что текущее рабочее пространство. Если происходит изменение рабочей области , сценарий проверяет, существует ли соответствующий (launcher-) файл данных (созданный первым сценарием). Если это так, он читает файл и изменяет Unity Launcher, как запоминается в файле.
Вот и все.
Как настроить
Скрипт должен 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чтобы сделать файл видимым (файлы, начинающиеся с a .
, по умолчанию невидимы).
Перейдите по рабочим областям и повторите процедуру: установите комбинацию значков запуска и нажмите комбинацию клавиш, чтобы «запомнить» набор для этого конкретного рабочего пространства.
Вы практически закончили Тестовый запуск фонового скрипта с помощью команды (из окна терминала, продолжайте работать):
python3 /path/to/launcher_perworkspace.py
Если все работает нормально, и ваш модуль запуска переключается на рабочую область, добавьте следующую команду в свои приложения автозагрузки: Dash> Startup Applications> Add:
/bin/bash -c "sleep 15&&python3 /path/to/launcher_perworkspace.py"
Заметки
- Если вы хотите изменить набор значков запуска для определенной рабочей области, просто перейдите в рабочую область, добавьте / удалите значки по своему усмотрению и нажмите комбинацию клавиш (нет необходимости перезапускать фоновый скрипт).
- Из комментариев я чувствую, что на ярлыке есть некоторое недопонимание, чтобы вспомнить текущий Launcher для текущего рабочего пространства. Вам нужно только одно сочетание клавиш, чтобы «сохранить» текущую панель запуска для текущей рабочей области. Он будет работать точно так же, независимо от того, на каком рабочем пространстве вы находитесь. Сам скрипт будет определять , что является текущей рабочей областью.
редактировать
Из вашего комментария я понимаю, что вы не уверены, что хотите запустить скрипт (ы), и боитесь, что испортите свой текущий лаунчер.
Я почти уверен, что это слишком (или слишком мало) уважение к тому, что делает сценарий. Однако вы можете просто сделать резервную копию вашего текущего 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 установить 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, хороший вопрос Денниса Дж и поддержка Parto привели к созданию ppa
сценария для сценария, описанного в webupd8 , включая графический интерфейс для управления им.
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 Launcher, если вы использовали предыдущий скрипт.