Screenlet, devilspie 또는 CCSM을 사용하여 각 작업 영역에 별도의 데스크탑 폴더 를 갖는 것에 대한 다양한 답변을 읽었 지만 … 내 질문에 대한 대답은 아닙니다. 며칠 전에 14.04 LTS를 설치했으며 대부분의 앱과 새로운 앱을 실행하는 데 성공했습니다. 내가 원하는 것은 각각 내가 실행하는 환경에 대해 서로 다른 아이콘 이있는 4 개의 별도 작업 공간을 갖는 것 입니다. 예를 들어
- 작업 공간 1 – 과학 및 수학 앱 전용
- 작업 공간 2 – 음악 도구 전용
- 작업 공간 3 – 전자 회로 및 시뮬레이션
- 작업 공간 4 – 웹 브라우징 및 일반 컴퓨팅
각 화면에 별도의 아이콘이 포함될 수있는 Android 태블릿을 생각해보십시오.
이 작업을 수행하는 방법은 분명해야하지만 답변을 찾을 수 없습니다. 나는 우분투에서 4 일이되었으므로 내가 뭘하는지 안다고 가정하지 마십시오!
답변
작업 공간마다 다른 Unity Launcher 설정 :
1.
아래 솔루션을 사용하면 작업 공간의 수에 관계없이 작업 공간마다 다른 실행기 아이콘 세트를 쉽게 가질 수 있습니다.
설정에는 두 부분이 있습니다.
-
현재 작업 공간의 실행기 아이콘 세트를 “기억”하기위한 하나의 바로 가기 키 조합입니다.
-
현재 작업 공간을 추적하고 해당 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합니다 (파일,.
기본적 로 은 보이지 않음).작업 공간을 탐색하고 절차를 반복하십시오. 실행기 아이콘 조합 설정 및 키 조합을 눌러 해당 특정 작업 공간 세트를 “기억”하십시오.
-
당신은 지금 실제로 끝났습니다. 다음 명령을 사용하여 백그라운드 스크립트를 테스트 실행하십시오 (터미널 창에서 계속 실행).
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를 초기 상황으로 복원하는 complete 명령이 포함 된 파일이 생성됩니다 . 응급 상황 인 경우 파일 내용을 복사하여 터미널에 붙여 넣기 만하면됩니다.
그러나 스크립트를 수동으로 변경하지 않으면 실행기가 엉망이 될 가능성이 거의 없습니다.
중요 편집 (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에 따르면 Dennis J의 좋은 질문과 Parto의 격려는 webupd8 에서 다루는 GUI를 포함 ppa
하여 스크립트 를 작성 하여 스크립트 를 작성 했습니다.
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를 다시 설정해야합니다.