จำกัด โปรแกรม gui ใน Linux เพียงหนึ่งอินสแตนซ์เท่านั้น


1

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

มีโปรแกรมบางอย่างที่แสดงพฤติกรรมหลัง แต่ฉันต้องการให้ทำแบบเดิม สิ่งนี้สามารถทำได้?

คำตอบ:


5

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


เมื่อฉันทำ ps ax | grep สำหรับโปรแกรมมันแสดงสถานะเป็น S เมื่อมันกำลังทำงาน ถ้าฉันปิดโปรแกรมมันจะไม่หายไปจากรายการ แต่จะแสดงสถานะเป็น S + แทน นั่นหมายความว่าอย่างไร?
tony_sid

3
^^^ นั่นเป็นคำถามใหม่ ;-)
Chris Nava

3

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


3

ฉันพบกระทู้นี้และนำไปใช้งานแล้วแบ่งปันเวอร์ชันของฉัน

ฉันสร้างไฟล์ที่ปฏิบัติการได้ /usr/local/bin/run_once.sh มี

#! /bin/bash
application=$1
if wmctrl -xl | grep "${application}" > /dev/null ; then
    # Already running, raising to front
    wmctrl -x -R "$application"
else
    # Not running: starting
    $@
fi

การตรวจสอบนี้ใช้ wmctrl หากแอปพลิเคชันที่คุณพยายามเริ่มมีหน้าต่างเปิดอยู่ (โปรแกรม gui บางโปรแกรมให้คนทำงานโดยไม่ใช้ gui) แทนที่จะใช้ psใช้ -x เพื่อใช้ WM_CLASS แทนชื่อแถบชื่อเรื่อง

สำหรับแต่ละโปรแกรมที่ฉันต้องการเพียงหน้าต่างเดียวที่ฉันคัดลอกระบบ .desktop ไฟล์ไปที่ ~/.local/share/applications และเปลี่ยน exec สนามจาก exec=program --arguments ไปยัง exec=/usr/local/bin/run_once.sh program --arguments

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