deepin-wine icon indicating copy to clipboard operation
deepin-wine copied to clipboard

企业微信的几个小问题: 托盘图标/顶层窗口

Open hopeday6688 opened this issue 1 year ago • 14 comments

首先, 感谢大姥提供的微信和企业微信版本. 这是我能找到的Ubuntu下最好用的微信和企业微信版本, 赞一个!

微信, 使用非常顺滑, 体验非常好.

企业微信, 虽然可以正常使用, 基本上也没有崩污问题, 但却有几个小问题, 非常影响体验. 我觉得这应该不是个别的问题, 估计很多Ubuntu用户都有, 所以在这里记录一下, 希望这些小问题能改进或解决.

  1. 系统版本 Ubuntu 22.04.2 LTS

  2. 桌面类型 GNOME Shell 42.5

  3. 企业微信版本 cat info { "appid": "com.qq.weixin.work.deepin", "name": "WeChat Work", "version": "4.0.16.6007deepin21", "arch": ["i386"], ....

  4. 问题一

  • 托盘头标不见了 image

  • 企业微信的窗口一旦打开, 就一直显示在最顶层. 其它应用窗口无法切换为最顶层,除非将企业微信最小化. 但一旦从最小化恢复显示, 其窗口就成为最顶层窗口.

  • 因为企业微信窗口一直抢占顶层窗口, 导致企业微信左侧状态栏里的一些弹出菜单和弹出窗口的显示不正常, 显示后一闪就过去了, 无法正常选择菜单进行操作.

谢谢!

hopeday6688 avatar Mar 20 '23 14:03 hopeday6688

自己顶一下

hopeday6688 avatar Mar 21 '23 10:03 hopeday6688

托盘图标问题属于高发问题区,我现在自己ubuntu 23.04甚至图标无法点击,一叉掉窗口就没。没办法,只能开一个workspace,把微信丢到另外一个workspace去,不占用日常的桌面空间。麻烦了点但也没好方法

zq1997 avatar Mar 27 '23 04:03 zq1997

企业微信在最顶层这个问题,大佬真的没有任何解决方案了吗

jxfruit avatar Apr 06 '23 07:04 jxfruit

窗口一直抢占顶层窗口导致菜单被窗口挡住可以试试下面的方法: WINEPREFIX=~/.deepinwine/Deepin-WXWork deepin-wine6-stable regedit 修改:

[HKEY_CURRENT_USER\\Software\\Wine\\X11 Driver]
"UseTakeFocus"="N"

重新启动企业微信 答案出处 https://forum.winehq.org/viewtopic.php?t=35267

squallliu avatar Apr 18 '23 02:04 squallliu

窗口一直抢占顶层窗口导致菜单被窗口挡住可以试试下面的方法: WINEPREFIX=~/.deepinwine/Deepin-WXWork deepin-wine6-stable regedit 修改:

[HKEY_CURRENT_USER\\Software\\Wine\\X11 Driver]
"UseTakeFocus"="N"

重新启动企业微信 答案出处 https://forum.winehq.org/viewtopic.php?t=35267

按照你的方式试了一下,还是不好使。

kaylorchen avatar May 05 '23 03:05 kaylorchen

@kaylorchen 我在 ubuntuunity 22.10 与 23.04 上有效 如果你是 wayland 的话,估计没用

squallliu avatar May 05 '23 23:05 squallliu

窗口一直抢占顶层窗口导致菜单被窗口挡住可以试试下面的方法: WINEPREFIX=~/.deepinwine/Deepin-WXWork deepin-wine6-stable regedit 修改:

[HKEY_CURRENT_USER\\Software\\Wine\\X11 Driver]
"UseTakeFocus"="N"

重新启动企业微信 答案出处 https://forum.winehq.org/viewtopic.php?t=35267

按照你的方式试了一下,还是不好使。

发现导致该问题的原因和解决方法了。 原因是wine有个阴影窗口,当把wine应用应用移动到屏幕边时会出现。 临时解决方案是通过wmctrl查询窗口id,然后使用xdotool关闭该窗口,具体命令如下:

  1. wmctrl -l -G -p -x image
  2. xdotool windowunmap 0x04600016 但是把wine应用最小化或放后台,重新唤醒时还会重新绘制。 参考链接:https://zhuanlan.zhihu.com/p/106926984

MakerFace avatar Jun 17 '23 02:06 MakerFace

托盘图标问题属于高发问题区,我现在自己ubuntu 23.04甚至图标无法点击,一叉掉窗口就没。没办法,只能开一个workspace,把微信丢到另外一个workspace去,不占用日常的桌面空间。麻烦了点但也没好方法

我也是Ubuntu23.04,有着同样的问题,多次尝试也无解

238Ver avatar Sep 11 '23 04:09 238Ver

感谢上面的大佬提供信息,针对企业微信,问题解决了,在Ubuntu 20.04上验证可行:

  1. 先问候没马的张小龙。

  2. 安装必要的工具 wmctrl 和 xdotool:

sudo apt install -y wmctrl xdotool
  1. 创建一个脚本,比如 /usr/local/bin/fuck_wxwork.sh。不同环境可能有所不同,自行调整。这是我个人用的(尝试了一下freerdp的RAIL模式,不太行):
#!/bin/bash

fuck_wxwork() {
  readarray window_list <<< "$(wmctrl -l -G -p -x | grep -E 'wxwork.exe.Wine|RAIL.' | sort -g -k3 -k1)"
  declare pid_list=($(printf "%s" "${window_list[@]}" | awk '{print $3}' | sort -u))
  for pid in "${pid_list[@]}"; do
    declare win_list=($(xdotool search --all --onlyvisible --pid $pid | sort))
    declare main_geom=()
    declare idx1=-1
    declare idx2=-1
    for ((i = 0; i < ${#win_list[@]}; i++)); do
      declare win=${win_list[i]}
      readarray geometry <<< "$(xdotool getwindowgeometry $win)"
      if [[ ${#geometry[@]} -lt 3 ]]; then
        continue
      fi
      declare x="$(printf "%s" "${geometry[@]}" | grep -o -E '[0-9]+,[0-9]+' | cut -d, -f1)"
      declare y="$(printf "%s" "${geometry[@]}" | grep -o -E '[0-9]+,[0-9]+' | cut -d, -f2)"
      declare w="$(printf "%s" "${geometry[@]}" | grep -o -E '[0-9]+x[0-9]+' | cut -dx -f1)"
      declare h="$(printf "%s" "${geometry[@]}" | grep -o -E '[0-9]+x[0-9]+' | cut -dx -f2)"
      if [[ "$w,$h" == "1,1" ]]; then
        continue
      fi
      if [[ $idx1 -lt 0 ]]; then
        main_geom=($x $y $w $h)
        idx1=$i
        continue
      fi
      declare dx="$(python3 <<< "print(abs(${main_geom[0]} - $x))")"
      declare dy="$(python3 <<< "print(abs(${main_geom[1]} - $y))")"
      declare dw="$(python3 <<< "print(abs(${main_geom[2]} - $w))")"
      if [[ $dx -lt 10 && $dy -lt 10 && $dw -lt 10 ]]; then
        idx2=$i
        break
      fi
    done
    for ((i = $(($idx1 + 1)); i <= $idx2; i++)); do
      declare win=${win_list[i]}
      xdotool windowunmap $win
    done
  done
}

main() {
  while true; do
    fuck_wxwork
    sleep 1
  done
}

main "$@"
  1. 赋予脚本可执行权限:
sudo chmod +x /usr/local/bin/fuck_wxwork.sh
  1. 添加开机自启动。创建文件:/etc/systemd/system/fuck_wxwork.service,内容如下:
[Unit]
Description=Fuck WxWork
After=network.target

[Service]
User=你的用户名
Environment="DISPLAY=:1" 你的显示器环境变量
ExecStart=/usr/local/bin/fuck_wxwork.sh
Restart=always

[Install]
WantedBy=multi-user.target
  1. 使能开机自启动:
sudo systemctl enable fuck_wxwork.service
sudo systemctl start fuck_wxwork.service

这样每1秒就会自动关闭那个阴影窗口。 腾讯虽然市值很高,但只是一家电子烟草公司,算不上科技公司,哎。

Anonyme2010 avatar Oct 20 '23 03:10 Anonyme2010

有一个窗口跟主窗口位置是相同的,似乎只要把这个窗口以及前一个窗口关闭就好了。

Anonyme2010 avatar Oct 20 '23 05:10 Anonyme2010

托盘图标问题属于高发问题区,我现在自己ubuntu 23.04甚至图标无法点击,一叉掉窗口就没。没办法,只能开一个workspace,把微信丢到另外一个workspace去,不占用日常的桌面空间。麻烦了点但也没好方法

23以后托盘不能点装 libappindicator1 就好了

squallliu avatar Nov 10 '23 01:11 squallliu

对于我不是很有用,这个问题可以通过关闭Appindicator and KStatusNotifierItem Support 或者 Ubuntu AppIndicators 扩展中的Enable Legacy Tray Icons support暂时可以显示wine tray,丑了点但是可以点击起码能用。参考 https://github.com/ubuntu/gnome-shell-extension-appindicator/issues/481 这类的问题很多,应该是一个bug.

238Ver avatar Nov 19 '23 13:11 238Ver

ubuntu22.04根据上面大佬的回复写的一个脚本,目前来看是解决了窗口边框和窗口一直在最上面的问题,截图也没那个虚化的阴影了

#!/usr/bin/env python3
import time
import os

while True:
    time.sleep(5)
    exist = os.popen("ps -ef | grep WXWorkWeb.exe")
    e = exist.readlines()
    if len(e) < 3:
        print(e)
        print("wxwork not started. Exit...")
        continue
    output = os.popen("""
    wmctrl -l -G -p -x | grep wxwork.exe.Wine 
    """)
    s = output.readlines()
    for i in s:
        print(i)
    print("==========================================")

    # 0x07c00009  1 166096 1994 722  1016 650  wxwork.exe.Wine       xx 企业微信
    # 0x07c00010  1 166096 1736 686  1052 686  wxwork.exe.Wine       xx

    c = list(filter(lambda it: "企业微信" in it or "MainWnd" in it, s))
    if not c:
        continue

    wx = c[0]
    width, height = wx.split()[5], wx.split()[6]


    def find_similar_size_window(width, height, tar_width, tar_height) -> bool:
        width, height, tar_width, tar_height = int(width), int(height), int(tar_width), int(tar_height)
        # 在窗口列表中查找与目标大小相似的窗口
        threshold = 50  # 设置一个阈值,表示窗口大小相似的范围
        if abs(width - tar_width) < threshold and abs(height - tar_height) < threshold:
            return True
        if tar_width == width and tar_height == 28:
            return True
        return False


    fs = filter(lambda it: "企业微信" not in it and "MainWnd" not in it, s)
    similar_size_window = filter(lambda x: find_similar_size_window(width, height, x.split()[5], x.split()[6]), fs)

    ids = list(map(lambda item: item.split()[0], similar_size_window))
    output.close()

    for wid in ids:
        print("kill id : ", wid)
        os.system("xdotool windowunmap " + wid)
    else:
        print("wxwork not display yet.")

pursue-wind avatar Dec 04 '23 04:12 pursue-wind

托盘图标问题。 我已经跑路KDE了,终于能用了(虽然还有点小问题) GNOME这几年是有点越来越难用了。

zq1997 avatar Apr 22 '24 02:04 zq1997