Fedora

如何為 scrot 和 gnome-screenshot 互動模式創建自定義快捷方式

  • March 27, 2015

我想通過gnome-control-center keyboard添加命令****scrot -s作為自定義快捷方式。加速鍵是 Super+S。

在此處輸入圖像描述

但它沒有用。

如果我刪除**-s或嘗試其他互動式命令,如xkill**,它們工作正常。

此外,**scrot -e ‘mv $f ~/Pictures/scrot/’**也可以正常工作。

所以我的問題是,為什麼scrot -s不起作用,我該如何解決。

我的發行版是 fedora 21,gnome 版本是 3.14.2,scrot 版本是 0.8

$$ UPDATE $$ gnome-screenshot -a也失敗了。

**$$ UPDATE 2 $$**預設快捷方式“將區域的螢幕截圖保存到圖片”工作正常,但我仍然很好奇為什麼當我將其設置為自定義快捷方式時它不起作用。 在此處輸入圖像描述

$$ UPDATE 3 $$ 以下是自定義快捷命令的錯誤日誌結果strace -v -s 1000000 -o /tmp/gnomescr.log gnome-screenshot -a

$ grep -ni CRITICAL /tmp/gnomescr.log 
2660:write(2, "\n(gnome-screenshot:8700): Gdk-CRITICAL **: gdk_pixbuf_get_from_surface: assertion 'width > 0 && height > 0' failed\n", 115) = 115
2686:write(2, "\n(gnome-screenshot:8700): Gtk-CRITICAL **: gtk_window_resize: assertion 'width > 0' failed\n", 91) = 91
2748:write(2, "\n** (gnome-screenshot:8700): CRITICAL **: Unable to capture a screenshot of any window\n", 87) = 87
$ 

首先,我嘗試了像 systemd 和 Xorg.bin 這樣的 strace 父程序,但我是 strace 的新手,所以我不知道。

然後我認為它可能與權限問題(su -,sudo,…等)有關。所以我打算以root身份按下快捷鍵。所以我很快意識到我可以用sudo xdotool key Super+s它來測試它。然後讓我感到驚訝的是它真的有效!

所以我嘗試xdotool key Super+s不使用 sudo,它仍然有效。所以我得出結論xdotool key Super+s說它工作正常,但我仍然無法弄清楚 xdotool 和從 strace 日誌中按下的鍵之間有什麼區別。

然後我想出了一個想法,如果我把xdotool key Super+s它作為自定義快捷方式呢?所以我創建了一個新的自定義快捷方式Super+J並綁定到 command xdotool key Super+s,其中Super+s已經綁定到 command scrot -s。當我按Super+j時它才有效

我測試了gnome-screenshot -a並且scrot -s兩者都像魅力一樣工作。

**$$ UPDATE $$**我找到了這個連結問題 476:Xmonad 應該在生成之前釋放鍵綁定

由 JohnTy 報導…@gmail.com,2011 年 9 月 18 日

在此處使用 scrot 進行螢幕截圖。Scrot 抓住鍵盤以監聽按鍵作為中止的信號。如果鍵盤不可用,它會報錯:

giblib error: couldn't grab keyboard:Resource temporarily unavailable

去測試:

將“scrot -s > /tmp/logfile”綁定到 xmonad.hs 中的按鍵

啟動按鍵,沒有任何反應。

檢查日誌文件,發現上述錯誤。

我認為這是一個競爭條件,因為綁定到“sleep 0.2; scrot -s”在這裡有效。真正的問題是 xmonad 不必要地掛在鍵盤上,而生成的應用程序正在期待它。

您使用的是什麼版本的產品?在什麼作業系統上? 0.9.2/slackware linux

sleep用來解決類似的問題。我測試了它並且它有效。但我必須把它放在一個 shell 腳本中,因為自定義命令似乎不支持**&&;** 用於連接多個命令。但是 sleep 0.2 的時間段有時對我不起作用。安全的方法當然是增加睡眠 0.5-1 秒。

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