帮助Conky与LXDE和PCManFM合作

问题描述 投票:3回答:7

正如你们中的一些人可能知道的那样,Conky或PCManFM(它的桌面管理器方面)存在一个错误,使得Conky窗口在以下某种情况下消失:

  • 在.conkyrc(Nautilus的常用配置)中设置“own_window_type override”并不会显示Conky窗口。
  • 在.conkyrc中设置“own_window_type desktop”会显示Conky窗口,但如果单击桌面则会消失。
  • 在.conkyrc中设置“own_window_type normal”会显示Conky窗口,它在单击桌面时不会消失,但是如果你使用LXPanel的“最小化所有窗口”插件(“显示桌面”等效),它就会消失。如果使用键盘快捷键也会发生这种情况。

有一些解决方法,例如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仍然像以前一样消失。

如果有人可以查看此文件并查看我的更改是否有意义,我将非常感激。

谢谢! :)

c linux x11 pcmanfm
7个回答
3
投票

这仍然是不可能的。我做了这个古怪的解决方法。只需使用own_window_type normal模式,您无法使用Win+D desktop快捷方式,并在显示桌面上修复conky。

首先我想,只需重新映射一下那个小巧的窗口就行了。但我发现,只要桌面聚焦,就不会有任何东西被吸引过来。然后我想,只要杀死并重新启动conky。但是在show desktop模式下,它将在后台创建。

所以为了得到回应:

  • 桌面必须没有聚焦
  • 重启conky或重新映射窗口

安装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回来了!

根据谷歌的一周,这种古怪的解决方案是宇宙中唯一的解决方案,因此鼓励改进。


说明:

  • zenity --info --text“Remapping Conky ......”& 我们需要创建一个随机窗口来取消桌面的焦点。 Conky本身不起作用。 :( 我们还需要脚本继续,所以使用&
  • PID = $! 获取最后一个进程的pid
  • 睡0.3 睡眠不足(慢速HTPC)并且窗口在创建之前被杀死。
  • 杀死$ pid 一旦执行其功能就杀死窗口。
  • xdotool windowmap xdotool search --classname 'conky' 最后,我们可以提出(重新映射)conky。

怪癖:

  • 桌面没有聚焦,因此您无法使用箭头导航桌面图标 我们可以重新聚焦桌面吗?只要窗口没有以编程方式最小化,就会保持稳定。
  • 延迟300毫秒,对话框闪烁。
  • 第二次按下Win + D返回('unshow desktop') 我们需要一种方法来检测桌面是否已经处于show-desktop-mode模式,在这种情况下脚本应该是exit 0

2
投票

最简单的解决方案与Openbox完美配合(并且应该与其他WM一起使用):

  1. 在你的.conkyrc文件中: own_window yes own_window_type desktop own_window_class Conky “桌面”窗口类型可防止在执行show desktop时最小化conky。此外,您的窗口将通过再次执行“show desktop”来恢复
  2. 安装xdotool包(它非常轻巧,不用担心),在终端模拟器中运行以下命令: xdotool search --class "Pcmanfm" behave %@ focus windowraise $(xdotool search --class "Conky") 并且在对焦桌面时确保你的conky不会隐藏
  3. 如果一切正常,请在终端中按Ctrl + C中断xdotool,然后将代码放在自动启动中。它可能不会立即开始,因此您必须创建一个包含的简单脚本(例如“show_conky.sh”) #!/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“)。
  4. 重启你的Xorg服务器。请享用! :) 我个人建议您使用SpaceFM来管理桌面图标。它允许您设置桌面区域的边距,因此conky从不覆盖图标。 Pcmanfm作为资源管理器看起来更友好,但您可以同时使用它们:spacefm可以使用其他应用程序打开位于桌面上的目录。它的桌面行为与pcmanfm完全相同,因此您只需将上面代码中的“Pcmanfm”替换为“Spacefm”即可

2
投票

这是一个古老的“问题”,但是当我搜索“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文件中。)


0
投票

解决方案是:

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) )

0
投票

以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显示桌面,桌面是专注的,因此您可以使用箭头键来导航桌面图标。

这个解决方案确实有自己的一套怪癖:

  • 第二次按下Win + D会显示当前桌面的所有窗口,而不仅仅是显示桌面之前处于活动状态的窗口。
  • 切换存储在.conky_desktop_state中,但它与show-desktop-mode不匹配,因为它只在脚本执行时切换。这意味着可以显示一个桌面而另一个桌面不显示。在这种情况下,将简要显示桌面,然后所有窗口都将处于活动状态。一个更紧迫的Win + D将显示桌面。
  • 有时整个事情都会失败,Conky会随着所有其他窗户消失,虽然很少。只是cat /usr/.../.conky_desktop_state和切换相反的价值(ie- echo 1 > /usr/.../.conky_desktop_state
  • 虽然大多数情况下Win + D之前的最后一个活动窗口在第二个Win + D之后位于顶部,但它不一定是活动的,这意味着您可能必须在窗口中单击或按Alt + Tab键才能开始输入它。这通常是终端窗口的情况。

理想情况下,我们可以单独查看每个桌面上的所有活动(映射)窗口,并根据Conky是否是唯一的活动窗口执行一个或另一个命令,但我不够智能(专用),这样做,所以这是我的贡献。请建立并回复。


0
投票

简化@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

-1
投票

随着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。很奇怪...

© www.soinside.com 2019 - 2024. All rights reserved.