การตั้งค่า Unity Launcher ต่อพื้นที่ทำงาน:
1. 2. 3. 4.
วิธีการแก้ปัญหาด้านล่างช่วยให้สามารถมีไอคอนตัวเรียกใช้งานที่แตกต่างกันต่อพื้นที่ทำงานได้อย่างง่ายดายไม่ว่าคุณจะมีพื้นที่ทำงานกี่แห่ง
การตั้งค่าประกอบด้วยสองส่วน:
ชุดคีย์ลัด (หนึ่ง) เพื่อ "จดจำ" ชุดไอคอนตัวเรียกใช้งานสำหรับเวิร์กสเปซปัจจุบัน
สคริปต์ที่ทำงานในพื้นหลังติดตามพื้นที่ทำงานปัจจุบันและการตั้งค่า 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เพื่อทำให้ไฟล์นั้นปรากฏ (ไฟล์ที่เริ่มต้นด้วย a .
จะไม่ปรากฏให้เห็นตามค่าเริ่มต้น)
นำทางผ่านเวิร์กสเปซของคุณและทำซ้ำขั้นตอน: ตั้งค่าการรวมกันของไอคอนตัวเรียกใช้และกดคีย์ผสมของคุณเพื่อ "จำ" ชุดที่กำหนดสำหรับเวิร์กสเปซนั้น
คุณทำจริงแล้ว ทดสอบสคริปต์พื้นหลังด้วยคำสั่ง (จากหน้าต่างเทอร์มินัลเรียกใช้ต่อไป):
python3 /path/to/launcher_perworkspace.py
ถ้าทุกอย่างทำงานได้ดีและตัวเรียกใช้งานของคุณสลับไปยังพื้นที่ทำงานให้เพิ่มคำสั่งต่อไปนี้ในแอปพลิเคชันเริ่มต้นของคุณ: Dash> แอปพลิเคชันเริ่มต้น> เพิ่ม:
/bin/bash -c "sleep 15&&python3 /path/to/launcher_perworkspace.py"
หมายเหตุ
- หากคุณต้องการเปลี่ยนชุดไอคอนเรียกใช้งานสำหรับเวิร์กสเปซเฉพาะให้ไปที่เวิร์กสเปซเพิ่ม / ลบไอคอนตามที่คุณต้องการและกดคีย์ผสมของคุณ (ไม่จำเป็นต้องรีสตาร์ทสคริปต์พื้นหลัง)
- จากความคิดเห็นที่ฉันได้รับความรู้สึกที่มีความเข้าใจผิดบางอย่างบนทางลัดที่จะจำ Launcher ปัจจุบันสำหรับพื้นที่ทำงานปัจจุบัน คุณจะต้องเป็นหนึ่งในแป้นพิมพ์ลัดที่จะ "ช่วย" ปล่อยปัจจุบันสำหรับพื้นที่ทำงานปัจจุบัน มันจะทำงานเหมือนกันทุกประการไม่ว่าคุณจะใช้พื้นที่ทำงานแบบใด สคริปต์ที่ตัวเองจะกำหนดสิ่งที่เป็นพื้นที่ทำงานปัจจุบัน
แก้ไข
จากความคิดเห็นของคุณฉันเข้าใจว่าคุณไม่แน่ใจที่จะเรียกใช้สคริปต์และคุณกลัวว่าคุณจะทำให้ตัวเรียกใช้งานปัจจุบันของคุณสับสน
ฉันค่อนข้างมั่นใจว่ามากเกินไป (หรือน้อยเกินไป :)) เคารพสิ่งที่สคริปต์กำลังทำอยู่ อย่างไรก็ตามคุณสามารถสำรอง 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 ของคุณกลับสู่สถานการณ์เริ่มต้น ในกรณีฉุกเฉินเพียงคัดลอกเนื้อหาของไฟล์และวางในเทอร์มินัล
แต่อีกครั้งเป็นไปได้ยากที่คุณจะทำให้ตัวเรียกใช้งานของคุณเสียไปเว้นแต่คุณจะเปลี่ยนสคริปต์ด้วยตนเอง
การแก้ไขที่สำคัญ (2)
ตามที่ร้องขอในความคิดเห็นขอรุ่นที่ทำงานโดยไม่ต้องใช้การรวมทางลัดใด ๆ เพียงแค่เรียกใช้สคริปต์และเริ่มตั้งค่าตัวเรียกใช้งานของคุณบนพื้นที่ทำงานเฉพาะ สคริปต์จะสร้างไฟล์ (มองไม่เห็น) ในโฮมไดเร็กตอรี่ของคุณเพื่อจดจำชุดตัวเรียกใช้ (Unity-) ของคุณในพื้นที่ทำงานที่แตกต่างกัน
ฉันลองใช้สคริปต์ "รุ่น 1" แต่ "ฝัง" ตัวเรียกใช้ตัวตรวจสอบสองตัวระหว่างพื้นที่ทำงานสองชุดกลายเป็นกลอุบายเพื่อป้องกันพฤติกรรมที่ไม่พึงประสงค์ (บันทึกข้อมูลที่ไม่ถูกต้อง) เมื่อเคลื่อนที่ผ่านพื้นที่ทำงานอย่างรวดเร็ว
วิธีใช้
เช่นเดียวกับเวอร์ชันแรกสคริปต์นี้ใช้wmctrl
:
sudo apt-get install 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 คำถามที่ดีของเดนนิสเจและการสนับสนุนของ Parto ได้นำไปสู่การสร้างppa
สคริปต์ครอบคลุม webupd8รวมถึง GUI ในการจัดการ
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 อีกครั้งหากคุณใช้สคริปต์ก่อนหน้า