작업 공간마다 다른 아이콘으로 다른 Unity Launcher를 얻는 방법은 무엇입니까?


20

Screenlet, devilspie 또는 CCSM을 사용하여 각 작업 영역에 별도의 데스크탑 폴더 를 갖는 것에 대한 다양한 답변을 읽었 지만 ... 내 질문에 대한 대답은 아닙니다. 며칠 전에 14.04 LTS를 설치했으며 대부분의 앱과 새로운 앱을 실행하는 데 성공했습니다. 내가 원하는 것은 각각 내가 실행하는 환경에 대해 서로 다른 아이콘 이있는 4 개의 별도 작업 공간을 갖는 것 입니다. 예를 들어

  • 작업 공간 1 – 과학 및 수학 앱 전용
  • 작업 공간 2 – 음악 도구 전용
  • 작업 공간 3 – 전자 회로 및 시뮬레이션
  • 작업 공간 4 – 웹 브라우징 및 일반 컴퓨팅

각 화면에 별도의 아이콘이 포함될 수있는 Android 태블릿을 생각해보십시오.

이 작업을 수행하는 방법은 분명해야하지만 답변을 찾을 수 없습니다. 나는 우분투에서 4 일이되었으므로 내가 뭘하는지 안다고 가정하지 마십시오!


작업 공간마다 다른 실행기 아이콘 세트를 의미 합니까? 나는 그것을 좋아하지만, 달리기를해야한다. 그것이 당신이 의미하는 바라면 내일 그 일을 할 것이다. 알려주세요.
Jacob Vlijm

그렇습니다, 야곱입니다. 음악과 관련이없는 회로 시뮬레이션을위한 특정 도구 (LTspice와 같은)가 있습니다.
Dennis J

의심의 여지없이 할 수 있습니다. 아마 내일 또는 일요일 :).
Jacob Vlijm

야곱 감사합니다. 오늘 하루를 시작해서 시도해 보도록하겠습니다. 이것은 내가 요청한 것과 똑같습니다 !!! 들어가서 다시보고하겠습니다.
Dennis J

야곱, 아직 시작하지 않았습니다. 시작하기 전에 백업 이미지를 만들고 싶습니다. 시스템 설정의 백업이 전체 파티션을 복원하는지 확실하지 않습니다. Clonezilla를 연구 해 왔으며 이미지를 생성 / 복원하기에 좋은 도구 인 것 같습니다. 그런 식으로 뭔가 잘못되면 내가 엉망이되기 전에 돌아올 수 있습니다. 이번 주에 새로운 1TB 드라이브가 출시됩니다. 시스템을 시스템으로 옮기려면 Clonezilla를 사용해야합니다. 스크립트는 내가 따라갈 수있는 것처럼 보이며, 시작하자마자 다시보고 할 것입니다. 후속 조치에 감사드립니다. 다른 사람들도 당신이 한 일에 감사하게 생각합니다.
Dennis J

답변:


24

작업 공간마다 다른 Unity Launcher 설정 :


1. 여기에 이미지 설명을 입력하십시오 2. 여기에 이미지 설명을 입력하십시오 3. 여기에 이미지 설명을 입력하십시오 4. 여기에 이미지 설명을 입력하십시오

아래 솔루션을 사용하면 작업 공간의 수에 관계없이 작업 공간마다 다른 실행기 아이콘 세트를 쉽게 가질 수 있습니다.

설정에는 두 부분이 있습니다.

  1. 현재 작업 공간의 실행기 아이콘 세트를 "기억"하기위한 하나의 바로 가기 키 조합입니다.

  2. 현재 작업 공간을 추적하고 해당 Unity Launcher를 설정하는 백그라운드에서 실행할 스크립트입니다. 사용자가 작업 공간을 전환 할 때마다 작동합니다.

작동 원리

두 개의 작은 스크립트가 관련됩니다.

번째 스크립트는 한 가지 간단한 작업을 수행합니다. 현재 실행기의 내용을 홈 디렉토리의 (숨겨진) 파일에 작성합니다 (현재 작업 공간 다음에 이름이 매겨 짐).

번째 스크립트는 현재 작업 공간이 무엇인지 주시합니다. 작업 공간 변경 이있는 경우 스크립트는 해당 (실행기) 데이터 파일이 존재하는지 (첫 번째 스크립트로 작성) 확인합니다. 그렇다면 파일에서 기억 된 것처럼 파일을 읽고 Unity Launcher를 변경합니다.

그게 다야.

설정 방법

  1. 스크립트 wmctrl를 설치 해야 합니다 :

    sudo apt-get install wmctrl
    
  2. 두 스크립트 가 모두 저장 될 디렉토리를 작성하십시오 . 두 스크립트는 기능을 공유하고 하나는 다른 디렉토리에서 가져 오기 때문에 하나의 디렉토리에 함께 보관해야합니다. 같은 이유로 아래 표시된대로 정확하게 이름을 지정해야합니다.

  3. 아래의 각 스크립트를 (서로 다른) 빈 파일에 복사 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
  4. 첫 번째 스크립트 ( set_workspace.py)를 선택한 단축키 조합 (시스템 설정> "키보드"> "바로 가기"> "사용자 정의 바로 가기")에 추가하십시오. "+"를 클릭하고 다음 명령을 추가하십시오.

    python3 /path/to/set_workspace.py
    
  5. 키 조합을 실행하고 다음과 같은 파일 .launcher_data_3이 홈 디렉토리에 작성 되는지 확인하십시오 . 파일을 표시하려면 Ctrl+ 를 눌러야 H합니다 (파일,. 기본적 로 은 보이지 않음).

    작업 공간을 탐색하고 절차를 반복하십시오. 실행기 아이콘 조합 설정 및 키 조합을 눌러 해당 특정 작업 공간 세트를 "기억"하십시오.

  6. 당신은 지금 실제로 끝났습니다. 다음 명령을 사용하여 백그라운드 스크립트를 테스트 실행하십시오 (터미널 창에서 계속 실행).

    python3 /path/to/launcher_perworkspace.py
    

    모두 제대로 작동하고 시작 프로그램이 작업 공간마다 전환되는 경우 시작 응용 프로그램에 대시> 시작 응용 프로그램> 추가 명령을 추가하십시오.

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

노트

  1. 특정 작업 공간에 대한 실행기 아이콘 세트를 변경하려면 작업 공간으로 이동하고 원하는대로 아이콘을 추가 / 제거한 다음 키 조합을 누르십시오 (백그라운드 스크립트를 다시 시작할 필요가 없음).
  2. 의견에서 현재 작업 공간의 현재 실행기를 기억하는 단축키에 대한 오해가 있다고 생각합니다. 현재 작업 공간의 현재 실행기를 "저장" 하려면 하나의 키보드 단축키 만 필요합니다 . 어떤 작업 공간에 있더라도 정확히 동일하게 작동합니다. 스크립트 자체가 결정됩니다 입니다 현재 작업 공간.

편집하다

귀하의 의견에 따르면, 귀하는 스크립트를 실행할지 확실하지 않으며 현재 실행기를 엉망으로 만들 것 같습니다.

스크립트가 수행하는 작업에 대해 너무 많은 (또는 너무 작은 :) 존중한다고 확신합니다. 그러나 다음 명령을 사용하여 현재 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_outputUnity Launcher를 초기 상황으로 복원하는 complete 명령이 포함 된 파일이 생성됩니다 . 응급 상황 인 경우 파일 내용을 복사하여 터미널에 붙여 넣기 만하면됩니다.

그러나 스크립트를 수동으로 변경하지 않으면 실행기가 엉망이 될 가능성이 거의 없습니다.


중요 편집 (2)

이에 버전 코멘트에의 요청에 따라 그 사용하지 않고 실행 중 하나를 단축키 조합을; 스크립트를 실행하고 특정 작업 공간에서 런처 설정을 시작하십시오. 스크립트는 홈 디렉토리에 (보이지 않는) 파일을 작성하여 다른 작업 공간에서 (Unity-) 실행 프로그램 세트를 기억합니다.

스크립트의 "버전 1"에서이 작업을 시도했지만 두 작업 공간 확인 사이에 두 개의 실행기 검사를 항상 "포함"하면 작업 공간을 빠르게 이동할 때 원하지 않는 동작 (잘못된 데이터 저장)을 방지하는 트릭으로 판명되었습니다.

사용하는 방법

  1. 첫 번째 버전과 마찬가지로이 스크립트는 wmctrl다음을 사용합니다 .

    sudo apt-get 설치 wmctrl

  2. 스크립트를 빈 파일로 복사하여 다른 이름으로 저장하십시오. launcher_toworkspace.py

  3. 다음 명령으로 실행하십시오 :

    python3 /path/to/launcher_toworkspace.py
    
  4. 예상대로 작동하면 시작 응용 프로그램에 다음 명령을 추가하십시오.

    /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를 다시 설정해야합니다.


바로 가기 키를 사용하지 않고도 가능합니까? 그것을 시각화하는 방법은 다음과 같습니다. 작업 공간 하나에서 아이콘 세트 만 표시됩니다. 작업 공간 2로 전환하면 대시 및 휴지통 아이콘을 제외하고 실행기가 비어 있습니다. 그런 다음 원하는 아이콘을 자동으로 저장합니다. 다른 작업 공간에 대해서도 반복하십시오. 어쩌면 GUI를 만들 수도 있습니다-작동하면 +500을 줄 것입니다. GUI는 선택 사항입니다.
Parto

1
@Parto WOW, 당신은 누군가의주의를 끄는 방법을 알고 있습니다. 다음 며칠 안에 답변을 기대하십시오 :).
Jacob Vlijm

1
대단해 나는 기다릴 것입니다 ... 좋은 질문이지만, 어떻게 생각하지 않았는지 궁금합니다.
Parto

1
@Parto 나는 당신의 관대함에 감동합니다. 추가 작업을 계획 중이며 ppaGUI를 포함하여 시작 / 중지, 환경 설정 등을 만들 수도 있습니다 . 푸시 주셔서 감사합니다! 그건 그렇고 당신의 데스크탑은 멋지게 보입니다!
Jacob Vlijm

1
언제든지 모든 사람은 이제 밀어 붙여야합니다. 또한 당신도 저를 도와주었습니다. 감사합니다. 이 '프로젝트'에 관해서는, 모든 사람이 기술적이지 않기 때문에 ppa는 좋을 것입니다.
Parto
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.