在我的计算机上,Inkscape 有时会陷入一种奇怪的状态,导致剪贴板操作失灵。将元素复制到剪贴板后,它开始生成许多窗口:
- 后记输出窗口,询问输出什么级别的 Postscript 以及各种设置
- 临时展示窗口具有
tmp
NNNNN
.svg` 作为标题,并显示剪贴板的内容 脚本错误输出窗口,说运行脚本时出现问题:Inkscape 已从执行的脚本中收到附加数据。脚本未返回错误,但这可能表示结果不会如预期。。然后窗口包含以下回溯:
UniConvertor failed: Traceback (most recent call last): File "/usr/bin/uniconvertor", line 13, in <module> uniconv_run() File "/usr/lib/python2.7/dist-packages/uniconvertor/__init__.py", line 83, in uniconv_run from app.io import load File "/usr/lib/python2.7/dist-packages/uniconvertor/app/__init__.py", line 69, in <module> from conf.configurator import Configurator File "/usr/lib/python2.7/dist-packages/uniconvertor/app/conf/configurator.py", line 11, in <module> from app.events import connector File "/usr/lib/python2.7/dist-packages/uniconvertor/app/__init__.py", line 69, in <module> from conf.configurator import Configurator File "/usr/lib/python2.7/distpackages/uniconvertor/app/conf/configurator.py", line 13, in <module> from sk1libs.utils.fs import gethome ImportError: No module named sk1libs.utils.fs
选择窗口并关闭/取消它们非常棘手。而且越来越多的窗口开始出现,间隔几秒钟。此外,我正在编辑文件的主窗口将其标题更改为记忆文件N
。如果我设法保存该窗口中的更改并退出,那么我可以重新启动并成功恢复工作。
一旦 Inkscape 进入此状态,即使重新启动后,它似乎仍会在复制时继续这样表现。如果我卸载该python-uniconvertor
软件包,我仍然会看到上述窗口,但我得到的不是回溯:
You need to install the UniConvertor software.
For GNU/Linux: install the package python-uniconvertor.
For Windows: download it from https://sk1project.net/modules.php?name=Products&product=uniconvertor&op=download
and install into your Inkscape's Python location
有各种漏洞 报告使用 UniConvertor - 它似乎无人维护且无法使用 - 但我实际上并不想在复制和粘贴时进行任何转换,只是想在 Inkscape 本身中的 SVG 文件内复制元素,有时也在 Inkscape 中的文件之间复制元素。
如果我删除使用 uniconvertor 和 sk1 的扩展/usr/share/inkscape/extensions
,则 uniconvertor 和脚本错误输出窗口不会出现,但我仍然会得到重复的 Postscript 和临时显示窗口等
我该如何调试为什么复制会执行如此奇怪的操作?
答案1
从命令行运行 inkscape,并在显示不受欢迎的额外窗口时将其暂停。然后运行ps -o command
并观察启动了哪些额外进程,例如:
/usr/bin/python gimp_xcf.py --tab="Options" --guides=false --grid=false --background=false --dpi=96 /tmp/ink_ext_XXXXXX.svgPAIY3Y
/bin/sh -c gimp -i --batch-interpreter plug-in-script-fu-eval -b - > /tmp/tmp6qiytj/junk_from_gimp.txt 2>&1
gimp -i --batch-interpreter plug-in-script-fu-eval -b -
这些是导致问题的其他输出扩展。它们一次只能运行一个。要查找所有输出扩展,请grep -l '<output>' *.inx
在扩展目录中执行。删除.inx
这些输出扩展的文件(或将它们移动到其他位置)将修复此错误。
答案2
听起来 Inkscape 的内部状态很乱。您可以尝试使用 Python 调试器运行 Inkspace pdb
,但我认为这并不容易。您还可以尝试调查剪贴板上是否有一些奇怪的东西,然后可能会触发问题(在这种情况下,问题可能是写入剪贴板的进程部分和/或对损坏的剪贴板内容做出反应的代码)。
要调试剪贴板内容,我会使用xclip
。X Window 系统(包括 X.org)有三个剪贴板:主剪贴板 ( XA_PRIMARY
)、辅助剪贴板 ( XA_SECONDARY
) 和剪贴板 ( XA_CLIPBOARD
)。据我所知,只有剪贴板可以包含非文本数据,因此仅调查剪贴板就足够了。
要找出剪贴板当前具有的所有变体(例如,如果你知道当前剪贴板内容将触发该问题),你可以运行
xclip -out -selection clipboard -target TARGETS
它将显示与剪贴板当前内容相关的不同数据变体的键。如果剪贴板上有 Inkscape 内容,则键列表相当长:
TIMESTAMP
TARGETS
MULTIPLE
image/x-inkscape-svg
image/svg+xml
image/x-inkscape-svg-compressed
image/svg+xml-compressed
text/plain
application/pdf
image/x-postscript
image/x-e-postscript
image/x-emf
image/x-wmf
text/x-povray-script
text/x-javafx-script
text/x-povray-script
text/x-tex
text/xml+fxg
image/svg+xml
application/x-xsk1
text/xml+xaml
application/x-zip
application/tar
application/x-xcf
image/hpgl
text/html
image/dxf
image/dxf
image/x-plt
application/x-zip
image/sif
image/png
您可以使用参数提取任何这些键的二进制内容,-target
参数中填充您要提取的值。在某些情况下,键将包含分号和/或特殊字符,您必须对这些字符进行编码才能将其正确传递给程序。
例如,
xclip -out -selection clipboard -target 'image/x-inkscape-svg'
将以未压缩的 inkscape 文档形式将内容的 XML 编码版本发送到剪贴板上。
我不知道 Inkscape 在您按Ctrl
+V
粘贴内容时选择其中一种格式的逻辑。我猜它更喜欢带有字母“inkscape”的格式作为最佳选项。