deepin-wine
deepin-wine copied to clipboard
企业微信的几个小问题: 托盘图标/顶层窗口
首先, 感谢大姥提供的微信和企业微信版本. 这是我能找到的Ubuntu下最好用的微信和企业微信版本, 赞一个!
微信, 使用非常顺滑, 体验非常好.
企业微信, 虽然可以正常使用, 基本上也没有崩污问题, 但却有几个小问题, 非常影响体验. 我觉得这应该不是个别的问题, 估计很多Ubuntu用户都有, 所以在这里记录一下, 希望这些小问题能改进或解决.
-
系统版本 Ubuntu 22.04.2 LTS
-
桌面类型 GNOME Shell 42.5
-
企业微信版本 cat info { "appid": "com.qq.weixin.work.deepin", "name": "WeChat Work", "version": "4.0.16.6007deepin21", "arch": ["i386"], ....
-
问题一
-
托盘头标不见了
-
企业微信的窗口一旦打开, 就一直显示在最顶层. 其它应用窗口无法切换为最顶层,除非将企业微信最小化. 但一旦从最小化恢复显示, 其窗口就成为最顶层窗口.
-
因为企业微信窗口一直抢占顶层窗口, 导致企业微信左侧状态栏里的一些弹出菜单和弹出窗口的显示不正常, 显示后一闪就过去了, 无法正常选择菜单进行操作.
谢谢!
自己顶一下
托盘图标问题属于高发问题区,我现在自己ubuntu 23.04甚至图标无法点击,一叉掉窗口就没。没办法,只能开一个workspace,把微信丢到另外一个workspace去,不占用日常的桌面空间。麻烦了点但也没好方法
企业微信在最顶层这个问题,大佬真的没有任何解决方案了吗
窗口一直抢占顶层窗口导致菜单被窗口挡住可以试试下面的方法:
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
窗口一直抢占顶层窗口导致菜单被窗口挡住可以试试下面的方法:
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 我在 ubuntuunity 22.10 与 23.04 上有效 如果你是 wayland 的话,估计没用
窗口一直抢占顶层窗口导致菜单被窗口挡住可以试试下面的方法:
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关闭该窗口,具体命令如下:
-
wmctrl -l -G -p -x
-
xdotool windowunmap 0x04600016
但是把wine应用最小化或放后台,重新唤醒时还会重新绘制。 参考链接:https://zhuanlan.zhihu.com/p/106926984
托盘图标问题属于高发问题区,我现在自己ubuntu 23.04甚至图标无法点击,一叉掉窗口就没。没办法,只能开一个workspace,把微信丢到另外一个workspace去,不占用日常的桌面空间。麻烦了点但也没好方法
我也是Ubuntu23.04,有着同样的问题,多次尝试也无解
感谢上面的大佬提供信息,针对企业微信,问题解决了,在Ubuntu 20.04上验证可行:
-
先问候没马的张小龙。
-
安装必要的工具 wmctrl 和 xdotool:
sudo apt install -y wmctrl xdotool
- 创建一个脚本,比如 /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 "$@"
- 赋予脚本可执行权限:
sudo chmod +x /usr/local/bin/fuck_wxwork.sh
- 添加开机自启动。创建文件:/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
- 使能开机自启动:
sudo systemctl enable fuck_wxwork.service
sudo systemctl start fuck_wxwork.service
这样每1秒就会自动关闭那个阴影窗口。 腾讯虽然市值很高,但只是一家电子烟草公司,算不上科技公司,哎。
有一个窗口跟主窗口位置是相同的,似乎只要把这个窗口以及前一个窗口关闭就好了。
托盘图标问题属于高发问题区,我现在自己ubuntu 23.04甚至图标无法点击,一叉掉窗口就没。没办法,只能开一个workspace,把微信丢到另外一个workspace去,不占用日常的桌面空间。麻烦了点但也没好方法
23以后托盘不能点装 libappindicator1 就好了
对于我不是很有用,这个问题可以通过关闭Appindicator and KStatusNotifierItem Support 或者 Ubuntu AppIndicators 扩展中的Enable Legacy Tray Icons support暂时可以显示wine tray,丑了点但是可以点击起码能用。参考 https://github.com/ubuntu/gnome-shell-extension-appindicator/issues/481 这类的问题很多,应该是一个bug.
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.")
托盘图标问题。 我已经跑路KDE了,终于能用了(虽然还有点小问题) GNOME这几年是有点越来越难用了。