您可能已经知道,Conky或PCManFM(它的桌面管理器方面)存在一个错误,该错误使Conky窗口在以下情况之一中消失:

  • 在.conkyrc(Nautilus的常规配置)中放平设置“own_window_type覆盖”完全不显示Conky窗口。
  • 在.conkyrc中设置“own_window_type桌面”会显示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仍然像以前一样消失。

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

    非常感谢! :)

    最佳答案

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

    首先,我认为,只要重新映射conky窗口就可以解决问题。但是我发现,只要将桌面聚焦,就不会在上面画任何东西。然后我想,杀死并重启conky。但是在show desktop模式下,它将在后台创建。

    因此,为了使conky返回:

  • 桌面必须没有焦点
  • 重新启动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又回来了!

    根据Google一周的调查,这个古怪的解决方案是宇宙中唯一的解决方案,因此鼓励对其进行改进。

    说明:
  • zenity --info --text“重新映射Conky ...”&
  • 我们需要创建一个随机窗口来使桌面失去焦点。 Conky本身不起作用。 :(
  • 我们还需要脚本才能继续,因此请使用
  • pid = $!
  • 获取最后一个进程
  • pid
  • 睡眠0.3
  • 少睡觉(HTPC慢),并且在创建窗口之前将其杀死。
  • 杀死$ pid
  • 一旦执行了功能,请立即终止该窗口。
  • xdotool窗口 map xdotool search --classname 'conky'
  • 现在,终于可以提高(重新映射)conky了。

  • 怪癖:
  • 桌面未聚焦,因此无法使用箭头导航桌面图标
  • 我们可以重新调整桌面的焦点吗?只要窗口没有以编程方式最小化,conky就会保持放置状态。
  • 300 ms延迟,并闪烁对话框。
  • 再次按Win + D返回(“取消显示桌面”)
  • 我们需要一种方法来检测桌面是否已经处于show-desktop模式,在这种情况下,脚本应为exit 0
  • 关于c - 帮助Conky与LXDE和PCManFM一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1261716/

    10-09 20:31