Bagaimana cara mendapatkan Peluncur Persatuan yang berbeda dengan ikon yang berbeda di setiap ruang kerja?

20

Saya membaca berbagai jawaban untuk memiliki folder desktop yang terpisah di setiap Workspace menggunakan Screenlets, devilspie, atau CCSM ... tapi itu bukan jawaban untuk pertanyaan saya. Saya memasang 14,04 LTS beberapa hari yang lalu dan telah berhasil mendapatkan sebagian besar aplikasi saya dan beberapa yang baru untuk dijalankan. Yang saya inginkan adalah memiliki 4 ruang kerja terpisah, masing-masing dengan beberapa ikon berbeda untuk lingkungan yang saya jalankan. Sebagai contoh,

  • Workspace 1 - didedikasikan untuk aplikasi sains dan matematika
  • Workspace 2 - didedikasikan untuk alat musik
  • Workspace 3 - untuk sirkuit dan simulasi elektronik
  • Workspace 4 - untuk penelusuran web dan komputasi umum

Pikirkan tablet Android di mana setiap layar dapat berisi ikon yang terpisah.

Pasti sudah jelas bagaimana melakukan ini, tetapi saya tidak dapat menemukan jawaban. Saya berumur 4 hari di Ubuntu, jadi tolong jangan berasumsi saya tahu apa yang saya lakukan!

Dennis J
sumber
Maksud Anda kumpulan ikon peluncur berbeda per ruang kerja? Enak saya suka itu, tapi saya harus lari, akan bekerja besok jika itu yang Anda maksud. Tolong beritahu saya.
Jacob Vlijm
Ya, itu dia Yakub. Ada alat khusus (seperti LTspice) untuk simulasi rangkaian yang tidak memiliki relevansi untuk musik.
Dennis J
Dapat dilakukan tanpa keraguan. Mungkin besok atau SUnday :).
Jacob Vlijm
Yakub terima kasih. Baru memulai hari ini, jadi saya akan mencobanya. Ini terdengar persis seperti apa yang saya minta !!! Saya akan masuk ke dalamnya dan melaporkan kembali.
Dennis J
Yakub, saya belum memulai ini. Sebelum saya mulai, saya ingin membuat gambar cadangan. Saya tidak yakin bahwa Cadangan dalam Pengaturan Sistem akan memulihkan seluruh partisi. Telah meneliti Clonezilla, sepertinya alat yang bagus untuk membuat / mengembalikan gambar. Dengan begitu jika terjadi kesalahan, saya dapat kembali sebelum saya mengacaukannya. Ada drive 1TB baru dalam perjalanan minggu ini. Saya harus menggunakan Clonezilla untuk memindahkan sistem ke sana. Skripnya terlihat seperti saya dapat mengikuti mereka, dan saya akan melaporkan kembali segera setelah saya mulai. Terima kasih atas tindak lanjutnya, saya yakin orang lain akan menghargai apa yang telah Anda lakukan juga.
Dennis J

Jawaban:

24

Mengatur Peluncur Persatuan yang berbeda per ruang kerja:


1. masukkan deskripsi gambar di sini 2. masukkan deskripsi gambar di sini 3. masukkan deskripsi gambar di sini 4. masukkan deskripsi gambar di sini

Solusi di bawah ini memudahkan untuk memiliki satu set ikon peluncur yang berbeda per ruang kerja, tidak peduli berapa banyak ruang kerja yang Anda miliki.

Penyiapan mencakup dua bagian:

  1. Kombinasi tombol pintas (satu) untuk "mengingat" sekumpulan ikon peluncur untuk ruang kerja saat ini.

  2. Script untuk dijalankan di latar belakang, melacak apa ruang kerja saat ini dan mengatur Unity Launcher yang sesuai. Kerjanya setiap kali pengguna beralih ruang kerja.

Bagaimana itu bekerja

Dua skrip kecil terlibat:

The pertama Script melakukan satu hal sederhana: menulis isi dari peluncur saat ini menjadi (tersembunyi) file dalam direktori home Anda, bernama (nomor) setelah ruang kerja Anda saat ini.

The kedua naskah mengawasi apa ruang kerja saat ini. Jika ada perubahan ruang kerja , skrip melihat apakah datafile (launcher-) yang sesuai ada (dibuat oleh skrip pertama). Jika demikian, itu membaca file dan mengubah Unity Launcher, seperti yang diingat dalam file.

Itu dia.

Cara mengatur

  1. Skrip perlu wmctrldiinstal:

    sudo apt-get install wmctrl
    
  2. Buat direktori tempat kedua skrip akan disimpan. Penting bahwa kedua skrip disimpan bersama dalam satu direktori, karena mereka berbagi fungsionalitas dan satu impor dari yang lain. Untuk alasan yang sama, Anda harus memberi nama persis seperti yang ditunjukkan di bawah ini.

  3. Salin setiap skrip di bawah ini ke dalam file kosong (berbeda), simpan ke dalam direktori (dibuat dalam 2.), dengan nama yang persis sama:

    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. Tambahkan skrip pertama ( set_workspace.py) ke kombinasi tombol pintas pilihan Anda: Pengaturan Sistem> "Keyboard"> "Pintasan"> "Pintasan Khusus". Klik "+" dan tambahkan perintah:

    python3 /path/to/set_workspace.py
    
  5. Jalankan kombinasi tombol dan lihat apakah file, seperti: .launcher_data_3dibuat di direktori home Anda. Anda mungkin perlu menekan Ctrl+ Huntuk membuat file terlihat (file, dimulai dengan yang .tidak terlihat secara default).

    Menavigasi melalui ruang kerja Anda dan ulangi prosedur: mengatur kombinasi ikon peluncur, dan tekan kombinasi tombol Anda untuk "mengingat" set untuk ruang kerja tertentu.

  6. Anda praktis sudah selesai sekarang. Tes-jalankan skrip latar belakang dengan perintah (dari jendela terminal, terus jalankan):

    python3 /path/to/launcher_perworkspace.py
    

    Jika semua berfungsi dengan baik, dan peluncur Anda berpindah per ruang kerja, tambahkan perintah berikut ke aplikasi Startup Anda: Dash> Startup Applications> Add:

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

Catatan

  1. Jika Anda ingin mengubah set ikon peluncur untuk ruang kerja tertentu, cukup navigasikan ke ruang kerja, tambahkan / hapus ikon sesuka Anda dan tekan kombinasi tombol Anda (tidak perlu memulai ulang skrip latar belakang).
  2. Dari komentar (s) saya merasa ada beberapa kesalahpahaman pada jalan pintas untuk mengingat Peluncur saat ini untuk ruang kerja saat ini. Anda hanya perlu satu pintasan keyboard untuk "menyimpan" peluncur saat ini untuk ruang kerja saat ini. Ini akan bekerja persis sama, tidak peduli di ruang kerja apa Anda berada. Script itu sendiri akan menentukan apa yang ruang kerja saat ini.

Edit

Dari komentar Anda, saya mengerti bahwa Anda tidak yakin untuk menjalankan skrip dan Anda takut Anda akan mengacaukan peluncur Anda saat ini.

Saya cukup yakin bahwa terlalu banyak (atau terlalu sedikit :)) menghormati apa yang dilakukan skrip. Namun, Anda dapat mencadangkan Unity Launcher saat ini dengan perintah:

printf 'gsettings set com.canonical.Unity.Launcher favorites "' > ~/launcher_output&&printf "$(gsettings get com.canonical.Unity.Launcher favorites)">>~/launcher_output&&printf '"'>>~/launcher_output

Ini akan membuat file ~/launcher_output, berisi perintah lengkap untuk mengembalikan Peluncur Persatuan Anda ke situasi awal. Dalam keadaan darurat, cukup salin konten file dan rekatkan di terminal.

Tetapi sekali lagi, sangat tidak mungkin Anda akan mengacaukan peluncur Anda, kecuali jika Anda mengubah skrip secara manual.


EDIT PENTING (2)

Seperti yang diminta dalam komentar, dengan ini versi yang berjalan tanpa harus menggunakan kombinasi jalan pintas apa pun ; jalankan saja skrip dan mulailah mengatur peluncur Anda di ruang kerja tertentu. Script akan membuat file (tidak terlihat) di direktori home Anda, untuk mengingat set Anda (Unity-) peluncur di ruang kerja yang berbeda.

Saya mencoba ini dalam "versi 1" dari skrip, tetapi selalu "menanamkan" dua peluncur-cek antara dua ruang kerja-cek ternyata merupakan trik untuk mencegah perilaku yang tidak diinginkan (menyimpan data yang salah) ketika bergerak cepat melalui ruang kerja.

Bagaimana cara menggunakan

  1. Seperti versi pertama, skrip ini menggunakan wmctrl:

    sudo apt-get install wmctrl

  2. Salin skrip ke file kosong, simpan sebagai launcher_toworkspace.py

  3. Jalankan dengan perintah:

    python3 /path/to/launcher_toworkspace.py
    
  4. Jika berfungsi seperti yang diharapkan, tambahkan perintah berikut ke Aplikasi Startup Anda:

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

Naskah

#!/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()

Catatan

Jika Anda mengatur ruang kerja Anda dengan versi skrip sebelumnya, mereka juga harus bekerja untuk versi ini.

AKP

Per 2015-04-23, pertanyaan bagus dari Dennis J, dan dorongan dari Parto, telah mengarah pada pembuatan ppaskrip untuk, dibahas di webupd8 , termasuk GUI untuk mengelolanya.

ppa:vlijm/lswitcher

Untuk menginstalnya, jalankan:

sudo add-apt-repository ppa:vlijm/lswitcher
sudo apt-get update
sudo apt-get install lswitcher

masukkan deskripsi gambar di sini

Sejak sekarang, itu dikemas untuk Trusty & Utopic. Saya akan menambahkan orang lain setelah pengujian. Saya juga akan menambahkan .debinstaller, tapi saya sarankan menggunakan ppa, karena biasanya hal-hal semacam ini diperbarui setiap sekarang dan kemudian.

Karena lokasi data viewport telah berubah dari ~/menjadi ~/.config/lswitcher, Anda harus mengatur Peluncur Persatuan lagi jika Anda menggunakan skrip sebelumnya.

Yakub Vlijm
sumber
Apakah ini mungkin tanpa menggunakan pintasan keyboard? Bagaimana saya memvisualisasikannya seperti di bawah ini: Ketika di ruang kerja satu, hanya satu set ikon yang ditampilkan; ketika saya beralih ke ruang kerja dua, peluncur kosong kecuali ikon tanda hubung dan tempat sampah - kemudian saya tambahkan ikon yang saya inginkan yang disimpan secara otomatis. Ulangi untuk ruang kerja lainnya. Mungkin Anda bahkan dapat membuat GUI untuk itu - akan memberi Anda +500 jika Anda membuatnya berfungsi. GUI bersifat opsional.
Parto
1
@Parto WOW, Anda tahu cara mendapatkan perhatian seseorang :) Itu mungkin, tetapi akan membutuhkan banyak utas untuk membuatnya bekerja dengan lancar (mencobanya dalam skrip trek "mono"). Harapkan jawaban dalam beberapa hari mendatang :).
Jacob Vlijm
1
Luar biasa. Saya akan menunggu ... pertanyaan yang bagus, bertanya-tanya bagaimana saya tidak memikirkan itu.
Parto
1
@Parto Saya harus mengatakan saya terkesan dengan kemurahan hati Anda. Saya berencana untuk bekerja lebih jauh dan mungkin membuat ppa, termasuk GUI untuk memulai / berhenti, preferensi dll. Terima kasih atas dorongannya! Omong-omong, desktop Anda tampak hebat!
Jacob Vlijm
1
Kapan saja. Setiap orang membutuhkan dorongan sekarang dan kemudian. Selain itu, Anda juga pernah membantu saya sebelumnya - anggap saja ini sebagai ucapan terima kasih. Tentang 'proyek' ini, ppa akan lebih baik karena tidak semua orang techy.
Parto