问题

问题

我每天都使用两种操作系统:带有 Unity 桌面环境的 Ubuntu 15.04 和带有 KDE-plasma-5 桌面的 Manjaro。我花了大量时间在电子邮件上,对我来说,让它像一个独立程序一样运行很方便,而不是像 Chromium 中的一个选项卡。

在这两个系统上,我都可以通过“更多工具”下的设置菜单为 gmail 创建启动器。在 Ubuntu/Unity 上,我可以将此启动器添加到面板,它将作为一个独立程序,具有自己单独的图标和键盘快捷键。在 Manjaro/KDE 上,我的 gmail 快捷方式显示一个独特的图标,但一旦程序启动,gmail 窗口将被识别为 chromium 窗口,它将与面板中现有的 chromium 窗口合并,而不是保留快捷方式上显示的图标。我还尝试过直接使用命令行标志创建快捷方式,如中所述这篇相当老的帖子,但行为是一样的。

如何在 KDE 中模仿 Unity 行为?是否有可能让 Web 应用程序表现得像独立程序一样,还是它会始终合并到任何现有的打开的 Chromium 窗口中?

答案1

问题

导致此问题的原因是 KDE 识别了不运行时显示启动器功能由其 X11 窗口提供class,而 chrome 不会更改 X11 窗口class,而是将其保留为谷歌浏览器并将其更改classname为一个唯一值。

解决方案

值得庆幸的是,可以强制 Gmail 窗口按照您想要的方式运行。

  1. 安装一个xdotool用你的包管理器调用的应用程序。
  2. 打开文件管理器并浏览到~/.local/share/applications/
  3. .desktop使用文本编辑器打开Chrome 为您的 Gmail Web 应用创建的文件
  4. 注意 StartupWmClass 的值
  5. 将以下内容附加到 Exec 行:&& xdotool search --sync --classname <value> set_window --class <value>,替换<value>为 StartupWmClass 的值。

下面是我通过这种方式编辑的另一个 Web 应用程序的示例:

[Desktop Entry]
Comment=
Exec=/opt/google/chrome/google-chrome --profile-directory=Default --app-id=hlomdbnjeagldabepchlcdhkaagfedim && xdotool search --sync --classname crx_hlomdbnjeagldabepchlcdhkaagfedim set_window --class crx_hlomdbnjeagldabepchlcdhkaagfedim
Icon=chrome-hlomdbnjeagldabepchlcdhkaagfedim-Default
Name=Outlook 365
NoDisplay=false
Path[$e]=
StartupNotify=true
StartupWMClass=crx_hlomdbnjeagldabepchlcdhkaagfedim
Terminal=0
TerminalOptions=
Type=Application
Version=1.0
X-KDE-SubstituteUID=false
X-KDE-Username=

该更改将把 Web 应用程序的窗口类更改为 KDE 所期望的。应用程序图标可能会短暂地显示为普通的 chrome 图标,但一旦 xdotool 完成,它就会很快被 .desktop 文件中设置的正确图标替换。

答案2

尝试转到 chrome://apps,右键单击应用程序并选择“以窗口形式打开”

来源:https://www.wikihow.com/Turn-Your-Favorite-Website-Into-Desktop-Apps-With-Google-Chrome

答案3

由于我发现它非常有用,我编写了一个适用于碎石机由于我有很多 chrome 应用,因此它会为每个安装的 chrome 应用自动提供说明。

(考虑到 Totos 的评论,我将在下面展示脚本)它尝试从 chrome 应用程序中确定 id,并将命令附加到行xdotoolExec=

#!/bin/bash

set -e

DIR="$HOME/.local/share/applications"
PATTERN="chrome-*.desktop"

if ! command -v xdotool > /dev/null; then
  echo "installing xdotool..."
  yes | sudo pacman -S xdotool
fi

for file in $(ls $DIR/$PATTERN)
do
  echo "$file:"
  ID=$(grep -m 1 Exec $file | sed -E 's/^(.*)--app-id=(\w*).*$/\2/g')
  CMD=" \&\& xdotool search --sync --classname $ID set_window --class $ID"
  if grep -q "$CMD" $file; then
    echo "  skip file"
    continue
  fi
  echo "  changing file"
  sed -E -i 's!^(Exec=)(.*)$!\1\2'"${CMD}"'!g' $file
done

echo "updating desktop database"
update-desktop-database $DIR
echo "done"

你也可以找到它这里因为这个脚本将来可能会修复一些错误。

也许这对其他人也有帮助。

答案4

对我来说,奇怪的是,我在 manjaro kde 中的 chrome 上遇到了你描述的相同问题,但 chromium 可以很好地处理 Web 应用程序图标。这很奇怪,有些人在使用 chrome 时遇到此问题,而其他人在使用 chromium 时也遇到此问题,安装相反的版本似乎可以解决问题。如果我没记错的话,chromium 在 manjaro repo 中可用,而 chrome 只能通过 aur 获得,我猜这可能与此有关(但我不确定,只是猜测)。我确实希望在下一个版本的 chrome 中修复此问题,但与此同时,我的解决方法是使用 chromium 访问 Web 应用程序,使用 chrome 访问旧的 google 帐户,尽管同时使用它们,但它似乎运行顺畅(我使用的是 8 年旧的联想 G500s i3)。也许这种解决方法对您有用,直到谷歌解决这个问题。

相关内容