Я создал профиль Firefox под названием "приложение" с парой расширений, используемых для скрытия адресов и панелей вкладок. Моя цель - получить файлы .desktop для Google Inbox, Calendar и т.д., Которые имитируют функциональность Chrome "Добавить на рабочий стол". На данный момент у меня есть файлы .desktop что-то вроде

#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Terminal=false
Type=Application
Name=Google Inbox (Firefox)
Exec=firefox -P app -new-window --class googleinbox inbox.google.com
Icon=email
StartupWMClass=googleinbox

Однако, когда у меня есть более одного из них, все окна сгруппированы в панели запуска под значком для первого. Когда я использую xprop WM_CLASS в каждом окне, я обнаруживаю, что все они действительно имеют WM_CLASS в зависимости от того, что я открыл первым.

Как я могу заставить Firefox обрабатывать флаг -class каждого окна, а не для каждого профиля?

1 ответ1

0

Поскольку никто, похоже, не имеет ответа, специфичного для 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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .