Действительно ли возможно, что у меня могли быть постоянный CLI или Терминал в одной из рабочих областей в Ubuntu 14.04, такой, что Терминал/CLI запустится на начальной загрузке и не мог быть закрыт.
Я должен использовать терминал много, и хотя открытие его в максимизируемом режиме хорошо работает, я хотел бы иметь его sticked на некоторой рабочей области постоянно.
Существует немного вещей..
1 - Это будет намного легче и быстрее при использовании землетрясения, как предложено выше.
2 - Даже если Вы хотите починить свой терминал в некоторой другой рабочей области постоянно, можно сделать это через CCSM (Compiz) => управление окнами => окно Place => пергамент окна Fixed => Фиксированная Область просмотра Окна
Можно выбрать рабочую область, сменив 'X положений Области просмотра и Положение Области просмотра Y'
Затем требуется добавить терминал в приложениях запуска. Так, чтобы Вы не запускали его собой, Это может быть сделано легко через
В Тире - ищут заявления Запуска =>, Добавляют
Это я думаю, удовлетворяет Ваши требования.
Открытое приложение в определенной рабочей областиSources: Как запустить терминал на входе в систему
Не точно ответ, но можно установить терминал GUAKE в человечности.
sudo apt-get install guake
Нажатие F12 переключает режим включения - выключения. Быстрее, чем переключение рабочих областей.:)
Что относительно того, чтобы установить рабочий стол, поскольку Вам нравится он. Тогда сделайте завершение работы, но выберите опцию флажка Save Session при наличии. Может работать?
Для спорта его: для поддерживания одного или нескольких приложений в рабочем состоянии на одной или нескольких указанных областях просмотра можно использовать сценарий ниже. Это работает в фоновом режиме и работает, как Вы описываете, но можно добавить несколько приложений для продолжания бежать на различных областях просмотра.
Хотя сценарий выглядит немного обширным, большая часть из него только выполняет одно время, для сбора данных о промежутке области (областей) просмотра, столбцах области просмотра и строках, разрешении экрана и таком. Это не часть цикла.
При закрытии окна приложения, Вы указали для области просмотра, оно открывает новое окно приложения на целенаправленной области просмотра.
Во-первых: установка wmctrl
:
sudo apt-get install wmctrl
Затем просто скопируйте сценарий в пустой файл, установите приложение, которое необходимо запустить (в одном или нескольких кортежах в списке, посмотрите пример в главном разделе сценария), и целенаправленная область (области) просмотра, на которой Вам нужен он, чтобы работать (и сохранить доступными). Сохраните его как keep_running.py
и сделайте это исполняемым файлом.
выполните его командой:
/path/to/keep_running.py
дополнительно, можно добавить его к приложениям запуска.
Сценарий:
#!/usr/bin/env python3
import subprocess
import time
# list applications and targeted viewports
applications = [("gnome-terminal", 4), ("gedit", 3)]
def get_value(command):
return subprocess.check_output(
["/bin/bash", "-c", command]).decode('utf-8').strip()
def screendata():
getres = get_value("xrandr").split(); idf = getres.index("current")
screen_res = (int(getres[idf+1]), int(getres[idf+3].replace(",", "")))
wsp_info = get_value("wmctrl -d").strip()
scr_data = [item.split("x") for item in wsp_info.split(" ") if "x" in item][0]
VP_hor = int(scr_data[0])/int(screen_res[0])
VP_vert = int(scr_data[1])/int(screen_res[1])
ranges_hor = [i*screen_res[0] for i in range(int(VP_hor))]
ranges_vert = [i*screen_res[1] for i in range(int(VP_hor))]
w_positions = [(int(ranges_hor[i]), int(ranges_vert[i2]))\
for i2 in range(len(ranges_vert)) for i in range(len(ranges_hor))]
return {"resolution": screen_res, "horizontal": ranges_hor,
"vertical": ranges_vert, "columns": int(VP_hor),
"window_positions": w_positions}
def get_viewport(abs_h, abs_v): #calculates viewport from absolute coords
hor = screen_data["horizontal"]
vert = screen_data["vertical"]
hor_position = len([n for n in hor if int(abs_h) >= n])
vert_position = len([n for n in vert if int(abs_v) >= n])
return int(hor_position+(vert_position-1)*screen_data["columns"])
def window_position(rel_h, rel_v): #calculates viewport from coords, relative to current viewport
wsp_info = get_value("wmctrl -d").strip().split()
vp_coords = eval(wsp_info[wsp_info.index("VP:"):][1])
abs_h = rel_h+vp_coords[0]
abs_v = rel_v+vp_coords[1]
return get_viewport(abs_h, abs_v)
def pid_appinfo(pid):
get_app = "ps -p "+pid+" -o comm="
return get_value(get_app)
def check_windows():
try:
wlist = get_value("wmctrl -l -p -G")
except Exception:
# retry; when switching viewports while the command runs, it raises an error
wlist = get_value("wmctrl -l -p -G")
wdata = [l.split()[2:5] for l in wlist.split("\n")]
app_windows = []
for item in wdata:
if item[0] != "0":
try:
if pid_appinfo(item[0]) == application\
and window_position(int(item[1]), int(item[2])) == target_viewport:
app_windows.append(item)
except Exception:
pass
if len(app_windows) == 0:
targeted_viewport = str(screen_data["window_positions"][target_viewport-1])\
.replace("(","").replace(")","")
subprocess.call(["wmctrl", "-o", targeted_viewport])
subprocess.Popen([application])
screen_data = screendata()
while True:
for item in applications:
application = item[0]; target_viewport = item[1]
check_windows()
time.sleep(2)
Этот сценарий находится также на gist.gisthub