Поскольку никто, похоже, не имеет ответа, специфичного для Firefox (возможно, из-за того, что флаг -class
, не документированный на странице руководства, не работает должным образом), я просто опубликую свой отвратительный взлом как решение. Если кто-то сможет существенно улучшить его, я вместо этого дам ему ответ.
Я написал следующий скрипт, назвал его firefoxApp.sh и поместил в ~/bin/. Это ужасный хак, и мне стыдно за это. И тоже горжусь. Я отключил отдельный профиль Firefox и вместо этого просто использовал wmctrl, grep и xprop, чтобы изменить WM_CLASS
вновь созданного окна, после задержки (поскольку окна иногда занимают значительное количество времени, чтобы появиться и получить название). Если бы кто-то мог сказать мне более точный и надежный способ найти окна для переклассификации, которые не страдают от условий времени / гонки, этот сценарий был бы значительно улучшен. Я пытался и не смог сделать это с PID запущенного процесса (предположительно, потому что весь профиль Firefox имеет один корневой PID). Я не буду публиковать здесь код для этой попытки, так как у меня его больше нет.
#!/bin/sh
targetclass=$1
url=$2
titlegrep=$3
if [ "$#" -ne 3 ]
then
echo "USAGE: $0 TARGETCLASS URL TITLEGREP" 1>&2
exit 1
fi
firefox -P default -new-window "$url" &
sleep 10
# Ensure only newlines split items in the upcoming for loop:
IFS='
'
for wid in `wmctrl -l -x | grep $titlegrep | awk '{ print \$1 }'`
do
xprop -id $wid -f WM_CLASS 8s -set WM_CLASS $targetclass
done
Этот скрипт я вызываю с использованием файлов .desktop в ~/.local/share/Applications, которые выглядят следующим образом.
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Terminal=false
Type=Application
Name=Calendar (Firefox)
Exec=firefoxApp.sh googlecalendar calendar.google.com Calendar
Icon=calendar
StartupWMClass=googlecalendar
Если я выберу, я могу использовать более конкретное имя значка, например google-calendar-firefox-app
, а затем удалить файл с именем google-calendar-firefox-app.svg
в ~/.local/share/icons.