0

我一直在尝试为 arch 编写一个小屏幕截图脚本。它可以工作,但问题是当我尝试在 i3-config 中为其分配键绑定时,它什么也不做。

首先,我尝试用 bash 完全编写它,效果很好,但我偶然发现了同样的问题,它没有执行。所以我已经将输出重定向到一个日志文件来检查它,它用这个来欢迎我:

import: unable to grab mouse '': Datei oder Verzeichnis nicht gefunden @ error/xwindow.c/XSelectWindow/9306.
import: unable to read X window image '': Erfolg @ error/xwindow.c/XImportImage/4942.
import: unable to read X window image '': Erfolg @ error/xwindow.c/XImportImage/5049.
import:  `/home/lukas/Screenshot/20190419/scoot7.png' @ error/import.c/ImportImageCommand/1288.

翻译第一行:找不到文件或目录@error[...] 翻译Erfolg:成功

我试过用谷歌搜索它,但这并没有让我真正找到任何东西,我也没有真正找到任何类似于 error/xwindow.c 的路径等等。

这是我的代码:

#!/usr/bin/env python
import os, os.path
import datetime
import sys

d = datetime.datetime.today()
directory="/home/lukas/Screenshot/%s"%d.strftime('%Y%m%d')

if not os.path.exists(directory):
    os.mkdir(directory)

fileCount = 1
for file in os.listdir(directory):
    if file.endswith('.png'):
        fileCount+=1

filename = "%s/scr%d.png"%(directory,fileCount)
os.system("import %s"%filename)

这是我的 i3 配置条目:

bindsym $mod+Shift+F12          exec --no-startup-id scoot > /tmp/log.out 2>&1

这样做的预期结果是,当我按下 mod+shift+f12 时,它应该将我的鼠标指针转换为“十字准线”,这样我就可以选择一些东西并对其进行截图。实际结果是,如果我正常运行它,它可以工作,但如果我尝试使用键盘快捷键,它只会输出到我的日志文件。

我几乎是编程和 linux 的新手,我不知道为什么它找不到我的鼠标,我想知道我是否可以明确告诉程序使用它,或者是否有其他方法可以做到这一点。

非常感谢。

胡格诺特

4

1 回答 1

0

不久前我写了一个 bash 脚本来做你想做的事,使用非常常见的实用工具ImageMagick,你可以Arch 上找到。

在这里,如果您愿意接受这种替代方案:

#!/bin/bash

# take screenshot using import from imagemagick
# allows to select the area by dragging across a rectangle
# or to select entire window by clicking inside it

set -e

# the date and time will be used as the file name
time=$(date +"%F_%H:%M:%S")

# naming the urxvt window "screenshot" so that the i3 "no_focus" option gets applied to it
urxvt -title "screenshot" -e bash -c "import $HOME/Screenshot/$time.png"

然后我在 i3 中使用它:

no_focus [title="screenshot"]
bindsym $mod+Shift+F12 layout tabbed; exec --no-startup-id bash my_script.sh

当然,您可能希望将日期格式更改为您在 python 中的格式。我喜欢有时间连续拍摄几张截图。而且您必须用终端仿真器的名称替换,如果您的终端仿真器没有以这种方式为窗口命名,urxvt您可能必须调整标志。-title

请注意,命名窗口很重要:我花了一点时间才弄清楚如何在不命名窗口并no_focus在 i3 中使用该窗口的情况下解决发生的情况:

焦点会跳到屏幕捕获窗口,因此我想截取屏幕截图的窗口。您在使用 bash 和 python 脚本时遇到的问题可能与此有关。您必须强制 i3 将鼠标保持在旧窗口上,而不是跳转到脚本触发的屏幕捕获窗口(默认情况下,i3 将专注于新创建的窗口)。

于 2020-01-13T07:32:25.447 回答