ฉันพบกระทู้นี้และนำไปใช้งานแล้วแบ่งปันเวอร์ชันของฉัน
ฉันสร้างไฟล์ที่ปฏิบัติการได้ /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