Linux

如何創建一個鍵盤快捷鍵來檢查程序是否已經打開,如果是,它會打開它的視窗而不是新實例

  • February 14, 2019

超級終端上的範例:

我按alt+ h,腳本應該檢查 hyper 是否已經在後台執行。

如果是,它應該已經打開了打開的視窗。

如果沒有,請打開一個新視窗。

作業系統:Ubuntu 18.04

創建鍵盤快捷鍵取決於您的 DesktopManager。在 Ubuntu 18中,這個答案解釋瞭如何. 以下是您應該設置為由您的快捷方式啟動的命令。

這個簡單的命令可以為我的視窗管理器切換到 Hyper 視窗:

wmctrl -a Hyper

所有支持 EWMH/NetWM 規範的視窗/桌面管理器都可以使用wmctrl. 很可能 Ubuntu 桌面是兼容的,但您可能需要安裝wmctrl.

我留下我之前的答案,只是為了讓你涉足桌面上可能做的其他事情。這就是我在上面找到命令的方式。


舊答案

您可以嘗試編寫的腳本的一些關鍵元素:

  1. ps -xau | grep hyper將獲得程序是否已經在執行的資訊。請注意,還會列出正在搜尋的 grep 程序hyper
  2. 第 1 步可能是可選的。您的視窗管理器很可能支持 EWMH/NetWM 規範。因此,您可以使用wmctrl. 您可能必須安裝它。輸入wmctrl終端以查看它是否存在。
  3. wmctrl -l將為您提供所有目前打開的視窗的列表。
  4. wmctrl -a然後,您可以啟動所需的視窗並使用或轉到該視窗wmctrl -R

wmctrl -h將告訴您可以對桌面執行的其他不同操作。

例如在我的機器上(有幾個打開的視窗和桌面),在啟動 Hyper 之後,當輸入 wmctrl -l 我有:

0x02c00006 18 mymachine urxvt
0x02e00006 19 mymachine ncurses.h = (/nix/store/ffjl7aw7f0gjwv4gb4mgb0w49v5dhrkg-ncurses-6.0-20171125-dev/include) - VIM
0x03c00006 16 mymachine urxvt
0x03000006 20 mymachine urxvt
0x03a00006  8 mymachine urxvt
0x00e00006 24 mymachine urxvt
0x01800003 15 mymachine Volume Control
0x04c00005  1 mymachine Hyper
0x03e00001 15 mymachine 2.3. Using Precedences - Chromium
0x03e00006 15 mymachine Edit - Unix & Linux Stack Exchange - Chromium
0x03e00007 15 mymachine C++ Core Guidelines - Chromium

注意這一行:它在桌面 1 上顯示,視窗 0x04c00005 的名稱為 Hyper:

0x04c00005  1 mymachine Hyper

您可以使用命令直接獲取此行:

wmctrl -l | grep Hyper

以便啟動視窗:

wmctrl -a 0x04c00005

但是由於某種原因,我不知道為什麼這個最新的命令在我的 Fluxbox 環境中不起作用…… Fluxbox 可能沒有實現所有wmctrl功能。

你應該測試一下。如果這在您的 Ubuntu 環境中有效,請嘗試編寫自動執行這些不同命令的 bash 腳本。然後告訴我們你在什麼方面取得了成功或阻礙。

編輯:似乎wmctrl -a 期望視窗的標題,而不是十六進制 ID。

所以解決方案很簡單:

wmctrl -a Hyper   

你也可以試試

wmctrl -R Hyper

引用自:https://unix.stackexchange.com/questions/500578