การตั้งค่าให้แสดงเฉพาะแอปพลิเคชันของเวิร์กสเปซปัจจุบันในตัวเรียกใช้


30

เป็นไปได้หรือไม่ที่จะมีแอปพลิเคชันที่เปิดอยู่ของพื้นที่ทำงานปัจจุบันในตัวเรียกใช้งาน แต่ไม่ใช่แอปพลิเคชันจากพื้นที่ทำงานอื่น


ฉันคิดว่า ctrl + (1,2,3,4) ใช้สำหรับเปลี่ยนพื้นที่ทำงาน แต่ตรวจสอบทางลัดในการตั้งค่าระบบ ...
อัลวาร์

กดปุ่ม SUPER (ปุ่ม Windows) ค้างไว้เพื่อแสดงภาพรวมของทางลัด Unity ที่มีอยู่ทั้งหมด ตรวจสอบคำถามและคำตอบนี้ด้วย
Glutanimate

ฉันแก้ไขคำถามที่สองของคุณเกี่ยวกับทางลัดออกจากโพสต์เพราะซ้ำซ้อนและได้รับคำตอบก่อนหน้านี้ ฉันเห็นว่านี่เป็นคำถามแรกของคุณ (ยินดีต้อนรับสู่ Askubuntu!): เราจะช่วยคุณได้ง่ายขึ้นถ้าคุณถามคำถามเพียงหนึ่งข้อต่อการโพสต์ โปรดคำนึงถึงสิ่งนี้ในอนาคตเมื่อใช้ AU
Glutanimate

คำถามเดียวกับที่นี่ อย่างไรก็ตามสิ่งนั้นขาดคำตอบ
RPiAwesomeness

อาจไม่ใช่คำตอบที่คุณมองหา แต่ขาดความเป็นเอกภาพในเรื่องการปรับแต่งได้ หากคุณมีความต้องการเฉพาะหรือต้องการควบคุมเดสก์ท็อปของคุณมากขึ้นคุณควรพิจารณาย้ายไปใช้สภาพแวดล้อมเดสก์ท็อปที่ยืดหยุ่นมากขึ้นเช่น KDE
Conchylicultor

คำตอบ:


30

สำหรับ Ubuntu Dock ที่มาพร้อมกับ Ubuntu 17.10 และใหม่กว่า (พร้อม GNOME)

ดีคำตอบอื่น ๆ ค่อนข้างเก่าดังนั้นฉันคิดว่ามันคุ้มค่าที่จะเพิ่มคำตอบที่ทันสมัย เป็นไปได้ที่จะทำเช่นนี้ในขณะนี้และไม่ยากเกินไป (ด้วย Ubuntu 17.10 และมี Gnome)

เพียงใช้dconf-editor :

sudo apt install dconf-editor

ไปที่org> gnome> shell> extensions> dash-to-dockและตรวจสอบพื้นที่ทำงาน ป้อนคำอธิบายรูปภาพที่นี่


1
คำถามไม่มีส่วนเกี่ยวข้องกับ Dash To Dock Gnome Extension คำถามเกี่ยวกับ Unity Launcher ซึ่ง Dash To Dock นั้นไม่สามารถใช้งานร่วมกับ Unity ได้
crookedleaf

2
@crookedleaf Ubuntu เปลี่ยนเป็น GNOME โดยมีการขีดประที่เชื่อมต่อกับฐานข้อมูลแล้วโดย rebut เป็นค่าเริ่มต้นด้วย 17.10
เซท

1
@Seth แต่ OP ใช้ความสามัคคีไม่ใช่ Gnome ดังนั้น OP จึงใช้แท็ก "Unity" โดยไม่ตั้งใจหรือใช้ Ubuntu กับ Unity
crookedleaf

3
@crookedleaf หรือเราเพียงแค่ต้องเก็บคำถามปรับปรุงเพื่อให้พวกเขามีคำตอบล่าสุดเกินไป :)
เซท

1
ใช้งานได้ดีใน 18.04 / w gnome ขอบคุณ! หมายเหตุส่วนขยายสามารถติดตั้งได้อย่างง่ายดายจากเว็บไซต์: Extensions.gnome.org/extension/307/dash-to-dock
Jeff Ward

8

วิธีทำให้แอปพลิเคชันไม่สามารถเปิดได้บนเวิร์กสเปซ (อื่น ๆ )

ใช้xdotool's windowunmapก็เป็นไปได้ที่จะซ่อนหน้าต่างสมบูรณ์ หน้าต่างหรือแอปพลิเคชันจะเกิดขึ้นอีกในไอคอนตัวเรียกใช้และจะไม่ปรากฏในผลลัพธ์เพิ่มเติมของwmctrlเพิ่มเติมในการส่งออกของ

ตามทฤษฎีแล้วสิ่งนี้สามารถเชื่อมต่อกับ "เวิร์กสเปซเอ็นจิ้น" ที่ใช้ในการนี้และสิ่งนี้คำตอบ นั่นจะเป็นทางออกที่หรูหราที่สุด

อย่างไรก็ตามกระบวนการของเพียงหลบซ่อนตัวอยู่ในพื้นที่ทำงานหน้าต่างและอื่น ๆ โดยอัตโนมัติระดมคนในพื้นที่ทำงานปัจจุบันเกินไปเรียกร้องที่จะใช้ในการอย่างต่อเนื่องพื้นหลังสคริปต์ (ตอนนี้) และไม่น่า "เป็นหวัด" ได้เป็นอย่างดี เนื่องจากหน้าต่างหายไปอย่างดีในกรณีที่มีข้อผิดพลาดฉันจึงตัดสินใจที่จะไม่เสนอขั้นตอนเป็นกระบวนการอัตโนมัติ (พื้นหลัง)

หากคำตอบนี้มีประโยชน์สำหรับคุณหรือไม่ขึ้นอยู่กับสถานการณ์และสาเหตุที่คุณต้องการซ่อนไอคอนของแอปพลิเคชันทำงานบนพื้นที่ทำงานอื่น การตัดสินใจเป็นของคุณ

การแก้ไขปัญหา; มันคืออะไรและทำงานอย่างไรในทางปฏิบัติ

  • สคริปต์พร้อมใช้งานภายใต้คีย์ลัดดูเหมือนว่าจะทำให้หน้าต่างทั้งหมดในพื้นที่ทำงานปัจจุบัน (และแอปพลิเคชัน) หายไปอย่างสมบูรณ์ นั่นหมายถึงไอคอนของแอปพลิเคชั่นใน Unity launcher ไม่แสดงกิจกรรมของแอปพลิเคชัน:

    สามแอปพลิเคชั่นที่ทำงาน: ป้อนคำอธิบายรูปภาพที่นี่หลังจากกดปุ่มทางลัด:ป้อนคำอธิบายรูปภาพที่นี่

  • การกดแป้น schortcut ร่วมกันอีกครั้งหน้าต่างและแอปพลิเคชันจะปรากฏขึ้นอีกครั้ง

  • เนื่องจากการรวมคีย์จะซ่อนหน้าต่างและแอปพลิเคชันจากเวิร์กสเปซปัจจุบันเท่านั้นคุณจึงสามารถสลับไปยังเวิร์กสเปซอื่นได้โดยไม่ต้องมีสัญลักษณ์ของอะไร (ซ่อนอยู่) บนเวิร์กสเปซปัจจุบัน
  • นอกจากนี้ยังมีการเลิกซ่อนจะทำ (เท่านั้น) บนพื้นที่ทำงานปัจจุบันดังนั้นในระยะสั้นกระบวนการของการซ่อนและ unhiding จะ doen อิสระอย่างสมบูรณ์ต่อพื้นที่ทำงาน

บท

#!/usr/bin/env python3
import subprocess    
import os
import time

datadir = os.environ["HOME"]+"/.config/maptoggle"
if not os.path.exists(datadir):
    os.makedirs(datadir)
workspace_data = datadir+"/wspacedata_"

def get_wlist(res):
    res = get_res()
    try:
        wlist = [l.split() for l in subprocess.check_output(["wmctrl", "-lG"]).decode("utf-8").splitlines()]
        return [w for w in wlist if all([
            0 < int(w[2]) < res[0],
            0 < int(w[3]) < res[1],
            "_NET_WM_WINDOW_TYPE_NORMAL" in subprocess.check_output(["xprop", "-id", w[0]]).decode("utf-8"),
            ])]
    except subprocess.CalledProcessError:
        pass

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(res):
    # get the current viewport
    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)

res = get_res()

try:
    f = workspace_data+current(res)
    wlist = eval(open(f).read().strip())
    for w in wlist:
        subprocess.Popen(["xdotool", "windowmap", w[0]])
    os.remove(f)
except FileNotFoundError:
    current_windows = get_wlist(res)
    open(f, "wt").write(str(current_windows))
    for w in current_windows:
        subprocess.Popen(["xdotool", "windowunmap", w[0]])

วิธีใช้

  1. สคริปต์ต้องการทั้งwmctrlและxdotool:

    sudo apt-get install wmctrl xdotool
    
  2. คัดลอกสคริปต์ลงในไฟล์ว่างแล้วบันทึกเป็น toggle_visibility.py
  3. ทดสอบรันสคริปต์: ในหน้าต่างเทอร์มินัลรันคำสั่ง:

    python3 /path/to/toggle_visibility.py
    

    ตอนนี้เปิดหน้าต่างเทอร์มินัลใหม่ (ตั้งแต่หน้าต่างแรกหายไปจากพื้นโลก) และเรียกใช้คำสั่งเดียวกันอีกครั้ง หน้าต่างทั้งหมดควรปรากฏขึ้นอีกครั้ง

    หมายเหตุ : ตรวจสอบให้แน่ใจว่าคุณไม่ได้เปิดหน้าต่าง "มีค่า" ในขณะทดสอบ

  4. หากใช้งานได้ดีให้เพิ่มคำสั่งลงในคีย์ผสมทางลัด: เลือก: การตั้งค่าระบบ> "คีย์บอร์ด"> "ทางลัด"> "ทางลัดที่กำหนดเอง" คลิกที่ "+" และเพิ่มคำสั่ง:

    python3 /path/to/toggle_visibility.py
    

คำอธิบาย

เช่นกล่าวว่าการใช้สคริปต์xdotool's windowunmapเพื่อ (สมบูรณ์) ซ่อน Windows และโปรแกรมที่พวกเขาเป็น บท:

  • อ่านเวิร์กสเปซปัจจุบันคืออะไร
  • อ่านหน้าต่างซึ่งมีอยู่บนพื้นที่ทำงานปัจจุบัน (เท่านั้น)
  • เขียนรายการหน้าต่างไปยังไฟล์ตั้งชื่อตามพื้นที่ทำงานปัจจุบัน
  • ซ่อนหน้าต่าง

ในการเรียกใช้ครั้งต่อไปสคริปต์:

  • ตรวจสอบว่าไฟล์ที่สอดคล้องกับพื้นที่ทำงานปัจจุบันที่มีอยู่
  • ถ้าเป็นเช่นนั้นอ่านรายการหน้าต่างและซ่อนหน้าต่าง

จึงสลับการมองเห็นหน้าต่างและแอพพลิเคชั่นบนพื้นที่ทำงานปัจจุบัน


ยิ่งใหญ่ ตอนนี้ก็ต่อเมื่อฉันสามารถหาวิธีที่จะรันสคริปต์โดยอัตโนมัติเมื่อฉันย้ายไปยังพื้นที่ทำงานอื่น ๆ ดังนั้นพวกเขาจึงหายไปอย่างน่าอัศจรรย์แล้วปรากฏขึ้นอีกครั้งเมื่อฉันย้ายกลับ บางทีฉันอาจจะเขียนสคริปต์ไพ ธ อนเพื่อแทนที่คีย์ลัดสำหรับctrl+ shift+arrow key
Thu Yein Tun

1
ในวันที่ 17.10 นี้เป็นไปได้ ดูคำตอบอื่น ๆ
Martin Melka

6

น่าเสียดายที่มันเป็นไปไม่ได้

Unity จะแสดงแอปพลิเคชันทั้งหมดจากทุกที่และไม่มีทางเปลี่ยนแปลงได้ มีรายงานข้อผิดพลาด - https://bugs.launchpad.net/ayatana-design/+bug/683170 แต่ดูเหมือนว่านักพัฒนาจะไม่ทำอะไรเลย อาจเป็นไปได้ว่าถ้าคุณทำเครื่องหมายที่ด้านบนของหน้าว่าข้อบกพร่องนี้ส่งผลกระทบต่อคุณมันจะช่วยให้นักพัฒนาเข้าใจถึงความสำคัญของตัวเลือกดังกล่าว


1
อย่าแสดงความคิดเห็นในรายงานข้อผิดพลาดเพียงทำเครื่องหมายว่าส่งผลกระทบต่อคุณที่ด้านบนของหน้า
Flimm

@Flimm คุณรู้หรือไม่ว่าตัวจัดการเดสก์ท็อปใดที่มีฟังก์ชั่นนี้
Cesar

2
ความสามัคคีดูดี แต่การขาดความสามารถในการปรับแต่งเองนั้นน่าผิดหวังจริงๆ
โปรแกรม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.