как сделать docky доступный только в рабочих областях?

Есть ли способ сделать docky доступный только в одной рабочей области а не в любой другой рабочей области в Ubuntu 14.04.

3
задан 29 July 2015 в 16:59

1 ответ

Фоновый сценарий, чтобы заставить docky работать на определенных рабочих областях (или не)

На основе точно того же механизма как этот ответ, ниже фонового сценария, который запускает/останавливает Docky средство запуска, в зависимости от текущей рабочей области.

Сам механизм в значительной степени проверяется. Однако в связанном вопросе это тестируется с установкой различных Средств запуска Единицы и установкой различных обоев на рабочую область, не запуск/остановку Docky. Это не должно однако иметь никакого значения вообще, и в часы я протестировал его, это работало без единственной ошибки.

Как использовать

  1. Потребности сценария wmctrl:

    sudo apt-get install wmctrl
    
  2. Скопируйте сценарий ниже в пустой файл, сохраните его как docky_perworkspace.py

  3. Тестовый прогон сценарий:

    • Запустить Docky
    • Запустите сценарий с команды:

      python3 /path/to/docky_perworkspace.py
      
    • Теперь Docky работает на всех рабочих областях. Перейдите к рабочим областям, которые Вы не хотите Docky появиться и работать (в то время как на рабочей области):

      pkill docky
      

    N.B. используйте pkill docky, не закрывайте docky из его собственного меню!

  4. Это - в значительной степени это. Если бы Вы хотите изменить настройки просто или запустить или уничтожить docky на рабочей области, Вы хотели бы, чтобы это работало или нет; сценарий будет помнить Ваше предпочтение.
  5. Если все хорошо работает, добавьте его к своим приложениям запуска: Тире> Приложения Запуска> Добавляет команду:

    /bin/bash -c "sleep 15&&python3 /path/to/docky_perworkspace.py"
    

Сценарий

#!/usr/bin/env python3
import subprocess    
import os
import time

datadir = os.environ["HOME"]+"/.config/docky_run"
if not os.path.exists(datadir):
    os.makedirs(datadir)
workspace_data = datadir+"/docky_set_"

def get_runs():
    try:
        subprocess.check_output(["pgrep", "docky"]).decode("utf-8")
        return True
    except:
        return False

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()
runs1 = get_runs()

while True:
    time.sleep(1)
    runs2 = get_runs()
    curr_ws2 = current()
    datafile = workspace_data+curr_ws2
    if curr_ws2 == curr_ws1:
        if runs2 != runs1:
            open(datafile, "wt").write(str(runs2))
    else:
        if not os.path.exists(datafile):
            open(datafile, "wt").write(str(runs2))
        else:
            curr_set = eval(open(datafile).read())
            if all([curr_set == True, runs2 == False]):
                subprocess.Popen(["docky"])
            elif all([curr_set == False, runs2 == True]):
                subprocess.Popen(["pkill", "docky"])           
    curr_ws1 = curr_ws2
    runs1 = get_runs()

Объяснение

Сценарий отслеживает текущую рабочую область (неважно, сколько рабочих областей Вы имеете). На рабочую область файл создается в /.config/docky_run, в котором "записан", если docky должен присутствовать или не на относящейся рабочей области (True или False)

Если Вы остаетесь на той же рабочей области, но docky или запускается или уничтожается ( pid появляется или концы), сценарий "понимает", что это - Вы, кто внес изменение на относящейся рабочей области, и файл обновляется.

Если рабочая область изменяется однако, сценарий видит, существует ли файл, читает его и или запускает или уничтожает docky (или ничего не делает если не необходимый), согласно содержанию файла и текущей ситуации. Если файл еще не существует (потому что Вы используете рабочую область впервые, так как Вы запустили сценарий впервые), файл создается и устанавливается на текущую (последнюю) ситуацию.

Поскольку настройки на рабочую область помнят в файлах, их будут помнить даже после перезапуска.

2
ответ дан 1 December 2019 в 17:04

Другие вопросы по тегам:

Похожие вопросы: