我经常运行一个程序从终端打开一个文件,我只想快速查看程序中的文件,而不单击程序的窗口,然后通过关闭程序Ctrl-F4这要求程序的窗口位于前面,即默认处于焦点位置。
如果程序是原生 Linux 的程序,默认情况下程序的窗口总是在前面,即焦点,所以我可以通过Ctrl-关闭程序F4。
如果程序是在 Wine 下运行的 Windows 程序,则该程序的窗口不在前面,即默认情况下不在焦点中。最前面的程序是启动该程序的终端。我经常忘记这一点,并且不小心通过Ctrl-关闭了终端而不是程序F4。关闭终端也会关闭程序,但效果超出了我的预期。
所以我的问题是:如何让Windows程序默认运行在前面?
笔记:
您可以通过使用 Windows 程序打开 pdf 文件来测试上述内容PDFXCview.exe在 Wine 2.0.1 下,并使用本机 linux 的程序 evince。我在 Ubuntu 16.04 下运行它们。
我运行 Windows 程序在终端中打开 wine 下的文件
wine /home/tim/path/to/PDFXCview.exe myfile.pdf
并且程序的窗口默认不在前面。
奇怪的是,如果我运行程序而不打开任何文件
wine /home/tim/path/to/PDFXCview.exe
默认情况下,程序的窗口位于前面。
可能相关或不相关的一件事是,我已设置使用 PDFXCview.exe 从 LXDE 中的文件管理器 PcManFM 打开 pdf 文件,方法是添加
~/.local/share/applications/mimeinfo.cache
:application/pdf=wine-extension-pdf.desktop;userapp-PDFXCview.exe-NHNW1Y.desktop;
文件内容在
~/.local/share/applications/userapp-PDFXCview.exe-NHNW1Y.desktop
哪里[Desktop Entry] Type=Application Name=PDFXCview.exe Exec=wine /home/tim/path/to/PDFXCview.exe %U Categories=Other; NoDisplay=true MimeType=application/pdf Terminal=false
它可能不相关,因为它是从桌面环境运行程序的设置,而我的问题是关于从终端运行程序。
当我在PcManFM的wine下使用PDFXCview.exe打开pdf文件时,通过双击PcManFM中的文件,PDFXCview.exe的窗口也不在前面。看https://askubuntu.com/q/925540/1471
谢谢。
答案1
首先请注意,前景窗口和带有键盘焦点的窗口不是同一件事。它们适用于 Mircosoft 的 Windows 以及许多窗口管理器,但不一定。例如,KDE 可以单独管理这两个属性。
现在关于你的问题,就像我上面提出的那样,这将取决于窗口管理器。在 Kde 中,有一些设置允许您控制键盘焦点,甚至是依赖于应用程序的设置(但仍然是窗口管理器的一部分)。上图显示了如何执行相反的操作(将接受焦点设置为“是”以执行您要求的操作)。我测试了针对一个应用程序的配置。
不要混淆窗口管理器、启动器等的角色。KDE、Gnome、LXDE 等都可以实现这些功能。窗口管理器管理哪些窗口在哪里、它们的大小、它们是否最小化、哪个窗口在哪个窗口后面、哪个窗口具有键盘焦点。应用程序也可以控制这一点,另一个应用程序也可以,但最终是注册为窗口管理器的进程负责。它可以阻止其他进程执行这些操作,并决定窗口的映射位置,以及在首次映射(或曾经)时是否获得键盘焦点。窗口管理器唯一可见的部分是所有其他窗口的标题栏(+关闭、最大化、最小化等图标)。
答案2
您可以使用 将焦点放在新启动的程序上xdotool
。
我使用以下简短脚本打开 PDF,以确保 PDF 查看器在打开文件后立即聚焦(如果同时打开多个文件也适用):
#!/bin/bash
# Filename expected by wine ("z:" being "/", the linux root directory)
Filename="z:${1//\//\\}"
# Start PDF-XChange Viewer, open the PDF file(s) in it, and continue with the script
WINEPREFIX=~/.wine/pdfxchange/ wine ~/.wine/pdfxchange/drive_c/Program\ Files/Tracker\ Software/PDF\ Viewer/PDFXCview.exe "$Filename" "$@" &
# Wait until the viewer has started so that xdotool can identify the window
while [ -z "$WID" ]; do WID=$(xdotool search --name "PDF-XChange Viewer"); sleep 0.1; done
# Wait until the viewer is really open and ready for input
sleep 0.5
# Activate the PDF-XChange Viewer window
xdotool windowactivate "$WID"
exit 0
当然,您必须调整 wine 文件位置。