Я прочитал различные ответы на наличие отдельных папок на рабочем столе в каждом рабочем пространстве, используя Screenlets, devilspie или CCSM ... но это не ответ на мой вопрос. Я установил 14.04 LTS несколько дней назад и добился большого успеха, запустив большинство своих приложений и несколько новых. Я хотел бы иметь 4 отдельных рабочих пространства, каждое из которых имеет несколько разных значков для сред, которые я запускаю. Например,
Подумайте о планшете Android, где каждый экран может содержать отдельные значки.
Должно быть очевидно, как это сделать, но я не могу найти ответ. Мне 4 дня на Ubuntu, поэтому, пожалуйста, не думайте, что я знаю, что делаю!
1. 2. 3. 4.
Решение ниже делает легко возможным иметь другой набор значков средства запуска на рабочую область, неважно, сколько рабочих областей Вы имеете.
Установка включает две части:
(Одна) комбинация сочетания клавиш, чтобы "помнить" набор значков средства запуска для текущей рабочей области.
Сценарий для выполнения в фоновом режиме, отслеживание того, что является текущей рабочей областью и установкой соответствующего Средства запуска Единицы. Это действует каждый раз, когда пользователь переключает рабочую область.
Включены два маленьких сценария:
Первый сценарий делает одну простую вещь: это пишет содержание текущего средства запуска в (скрытый) файл в Вашем корневом каталоге, названном (пронумерованным) после Вашей текущей рабочей области.
Второй сценарий следит за тем, что является текущей рабочей областью. Если существует изменение рабочей области, сценарий видит, существует ли соответствие (средство запуска-) файл данных (созданный первым сценарием). Если так, это читает файл и изменяет Средство запуска Единицы, как помнится в файле.
Именно.
Потребности сценария wmctrl
быть установленным:
sudo apt-get install wmctrl
Создайте каталог, в котором будут сохранены оба сценария. Это - importants, что оба сценария держатся вместе в одном каталоге, так как они совместно используют функциональность, и каждый импортирует из другого. По той же причине важно, чтобы Вы назвали их точно, как обозначено ниже.
Скопируйте каждый из сценариев ниже в (различный) пустой файл, сохраните их в каталог (созданный в 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
Если все хорошо работает, и Ваши переключатели средства запуска на рабочую область, добавьте следующую команду к своим приложениям Запуска: Тире> Приложения Запуска> Добавляет:
/bin/bash -c "sleep 15&&python3 /path/to/launcher_perworkspace.py"
Из Вашего комментария я понимаю, что Вы не уверены для запущения скрипта, и Вы боитесь, что испортите свое текущее средство запуска.
Я вполне уверен, который является слишком много (или слишком мало :)) уважение к тому, что делает сценарий. Однако можно просто резервировать yor текущее Средство запуска Единицы с командой:
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
, содержа полную команду для восстановления Средства запуска Единицы к начальной ситуации. В случае крайней необходимости просто скопируйте содержание файла и вставьте его в терминале.
Но снова, действительно маловероятно, что Вы испортите свое средство запуска, если Вы не измените сценарий вручную.
Согласно просьбе в комментарии, настоящим версия, которая работает, не имея необходимость использовать любую комбинацию ярлыка; просто запустите скрипт и начните настраивать свои средства запуска на определенных рабочих областях. Сценарий создаст (невидимые) файлы в Вашем корневом каталоге, для запоминания набора (Единица-) средства запуска на различных рабочих областях.
Я попробовал это в "версии 1" сценария, но всегда "встраивание" этих двух проверок средства запуска между двумя проверками рабочей области оказалось приемом для предотвращения нежелательного поведения (сохраняющий неправильные данные) при перемещении быстро через рабочие области.
Как первая версия, этот сценарий использование wmctrl
:
склонные sudo - получают установку 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()
Если Вы настраиваете свои рабочие области с предыдущей версией сценария, они должны также работать на эту версию.
Согласно 23.04.2015, деликатный вопрос Dennis J и поддержка Parto, имеют вывод к созданию a ppa
для сценария, покрытого на webupd8, включая GUI для управления им.
ppa:vlijm/lswitcher
Для установки его работайте:
sudo add-apt-repository ppa:vlijm/lswitcher
sudo apt-get update
sudo apt-get install lswitcher
С тех пор теперь, это упаковывается для Trusty & Utopic. Я добавлю других после тестирования. Я также добавлю a .deb
установщик, но я предложил бы использовать ppa
, так как обычно такого рода вещи обновляются время от времени.
Так как местоположение данных области просмотра изменилось от ~/
кому: ~/.config/lswitcher
, необходимо будет настроить Средство запуска Единицы снова при использовании предыдущего сценария.