正如你们中的一些人可能知道的那样,Conky或PCManFM(它的桌面管理器方面)存在一个错误,使得Conky窗口在以下某种情况下消失:
有一些解决方法,例如deactivating PCManFM's desktop management(并使用feh设置壁纸,可能是iDesk用于图标)或using another file manager altogether,但我注意到这些都是低于标准的解决方案。我真的很喜欢PCManFM,我真的很喜欢Conky。什么人要做? : - /
所以我在LXPanel's source挖了一个相关的代码片段,可以解决我的问题。该文件是src / plugins / wincmd.c。
我的想法是,当单击“最小化所有窗口”按钮时,所有窗口(类)名称将与静态字符串“Conky”进行比较,如果匹配,则它不会最小化该窗口。简单,它应该工作。但问题是,自从我触及任何C代码已经过去几年了,我还没有真正使用过Xlib。
到目前为止,我做了以下更改:
19a20
> #include <string.h>
77a79,82
>
> /* Getting window's class name */
> XClassHint class;
> XGetClassHint(GDK_DISPLAY(), client_list[i], &class);
81c88
< if (((task_desktop == -1) || (task_desktop == current_desktop))
---
> if (((task_desktop == -1) || (task_desktop == current_desktop) || strcmp(class.res_name, "Conky") != 0)
这个编译正确,但是当我运行新的lxpanel并点击“最小化所有窗口”时,Conky仍然像以前一样消失。
如果有人可以查看此文件并查看我的更改是否有意义,我将非常感激。
谢谢! :)
这仍然是不可能的。我做了这个古怪的解决方法。只需使用own_window_type normal
模式,您无法使用Win+D desktop
快捷方式,并在显示桌面上修复conky。
首先我想,只需重新映射一下那个小巧的窗口就行了。但我发现,只要桌面聚焦,就不会有任何东西被吸引过来。然后我想,只要杀死并重新启动conky。但是在show desktop
模式下,它将在后台创建。
所以为了得到回应:
安装xdotool; apt-get install xdotool
创建一个脚本,例如/usr/local/bin/conky-remap.sh
:
#!/usr/bin/env bash
zenity --info --text "Remapping Conky..." &
pid=$!
sleep 0.3
kill $pid
xdotool windowmap `xdotool search --classname 'conky'`
编辑~/.config/openbox/lxde-rc.xml
(或您的发行版中的快捷方式)。
找:
<keybind key="W-d">
<action name="ToggleShowDesktop"/>
</keybind>
改成:
<keybind key="W-d">
<action name="ToggleShowDesktop"/>
<action name="Execute">
<execute>conky-remap.sh</execute>
</action>
</keybind>
激活新的键盘快捷键配置:
openbox --reconfigure
按Win + D.你会看到一个闪光和conky回来了!
根据谷歌的一周,这种古怪的解决方案是宇宙中唯一的解决方案,因此鼓励改进。
说明:
pid
xdotool search --classname 'conky'
最后,我们可以提出(重新映射)conky。怪癖:
exit 0
最简单的解决方案与Openbox完美配合(并且应该与其他WM一起使用):
.conkyrc
文件中:
own_window yes
own_window_type desktop
own_window_class Conky
“桌面”窗口类型可防止在执行show desktop时最小化conky。此外,您的窗口将通过再次执行“show desktop”来恢复xdotool
包(它非常轻巧,不用担心),在终端模拟器中运行以下命令:
xdotool search --class "Pcmanfm" behave %@ focus windowraise $(xdotool search --class "Conky")
并且在对焦桌面时确保你的conky不会隐藏#!/bin/sh
sleep 5
xdotool search --class "Pcmanfm" behave %@ focus windowraise $(xdotool search --class "Conky")
应根据您的系统定义所需的最短睡眠时间。可以肯定的是,在执行“show_conky.sh”之前,conky不会在第一次启动时隐藏,您还可以使用xdotool focus windowraise $(xdotool search --class "Conky")
命令创建另一个脚本并在其中创建适当的休眠时间(或者尝试在“sleep”和“xdotool”之间添加它表现“命令它”show_conky.sh“)。这是一个古老的“问题”,但是当我搜索“Conky LXDE”时谷歌点击率相当高,因为我无法让Conky在Lubuntu工作。但是没有必要破解LXPanel!
经过多次搜索和错误的试验和试验后,我在“PCLinuxOS论坛”中找到了Just Worked™的.conkyrc
文件。事实证明,它是从Lubuntu 11.10调整的绝佳基础。
我现在在Linux Mint 13 LTS“Maya”Xfce(基于Ubuntu 12.04)上使用相同的设置,它继续满足我(非常简单)的Conky要求。我的.conkyrc
文件的当前形式是saved in a Gist,如果有人认为它可能会帮助他们。 (论坛的原始源链接被注释到rc文件中。)
解决方案是:
NetWMState nws;
guint task_desktop = get_net_wm_desktop(client_list[i]);
get_net_wm_state(client_list[i], &nws);
if (((task_desktop == -1) || (task_desktop == current_desktop))
&& ( ( ! nwwt.dock) && ( ! nwwt.desktop) && ( ! nwwt.splash)
&& ( ! nws.skip_pager) )
以Redsandro的解决方案为基础:
按照Redsandro的建议和sudo apt-get install xdotool
,在你的conky-remap.sh
(或任何地方)目录中创建一些/usr/local/bin
(或其他)脚本。另外,如果您还没有wmctrl
,请安装它。我们将使用它来使Conky处于活动状态(我知道这与映射不同,但它的行为与我期望的一样,所以我并不担心。)
运行wmctrl -l
列出所有窗口,而Conky正在运行,并记下Conky的标题(我的像是Conky (<my-machine-name>)
。
当你在它的时候创建另一个文件,我们将在其中保存桌面的当前状态(0 =不显示桌面模式,1 = show-desktop-mode ...几乎),类似于.conky_desktop_state
。我也把它放到了/usr/local/bin
。现在回到conky-remap.sh
:
#!/usr/bin/env bash
state=$(cat /usr/local/bin/.conky_desktop_state)
dt=$(xdotool get_desktop)
if (( $state == 1 )) ; then
echo 0 > /usr/local/bin/.conky_desktop_state
wmctrl -a "Conky (<my-machine-name>)"
else
echo 1 > /usr/local/bin/.conky_desktop_state
wmctrl -a "Conky (<my-machine-name>)"
xdotool search --desktop $dt . windowmap %@
fi
wmctrl
激活窗口的命令并不关心桌面是否对焦,因此我们不需要睡眠或闪烁对话窗口到屏幕。 $state
和$dt
是保存桌面当前状态(同样,种类)和当前桌面ID号的变量。
xdotool search --desktop $dt . windowmap %@
将当前桌面上的所有窗口映射回屏幕,并将其他桌面单独留下。
编辑~/.config/openbox/lubuntu-rc.xml
或在按下Win + D时执行脚本的任何位置。
<keybind key="W-d">
<action name="ToggleShowDesktop"/>
<action name="Execute">
<command>conky-remap.sh</command>
</action>
</keybind>
openbox --reconfigure
刷新键绑定,你应该好好去。
使用Win-D显示桌面,桌面是专注的,因此您可以使用箭头键来导航桌面图标。
这个解决方案确实有自己的一套怪癖:
.conky_desktop_state
中,但它与show-desktop-mode
不匹配,因为它只在脚本执行时切换。这意味着可以显示一个桌面而另一个桌面不显示。在这种情况下,将简要显示桌面,然后所有窗口都将处于活动状态。一个更紧迫的Win + D将显示桌面。cat /usr/.../.conky_desktop_state
和切换相反的价值(ie- echo 1 > /usr/.../.conky_desktop_state
)理想情况下,我们可以单独查看每个桌面上的所有活动(映射)窗口,并根据Conky是否是唯一的活动窗口执行一个或另一个命令,但我不够智能(专用),这样做,所以这是我的贡献。请建立并回复。
简化@imiric的答案:
Openbox RC.xml(例如〜/ .config / openbox / lxde-rc.xml):
<keybind key="W-d">
<action name="ToggleShowDesktop"/>
<action name="Execute">
<command>wmctrl -a "Conky (hostname)"</command>
</action>
</keybind>
〜/ .conkyrc:
own_window yes
own_window_type normal
own_window_class conky-semi
own_window_transparent yes
own_window_hints undecorated,sticky,skip_taskbar,skip_pager
own_window_argb_visual yes
随着pcmanfm运行,在debian squeezy上使用LXDE的conky透明度获得成功。
在conky配置文件(即.conkyrc)中,我删除了所有'own_window'行,除了以下内容:
own_window yes
own_window_class conky
own_window_transparent yes
own_window_hints undecorated,below,skip_taskbar,sticky,skip_pager
再添加一些经常使用的行会导致透明度失败,或者根本不会启动conky。很奇怪...