У меня есть приложение, которое запускает веб-страницу в «текущем» браузере, когда пользователь выбирает ее. Эта часть моего приложения отлично работает в версии для Windows, но я не могу понять, как это сделать в сборке Linux.
Прямо сейчас версия Linux жестко запрограммирована для Firefox в определенном каталоге и каждый раз запускает новый экземпляр и не показывает URL, который я передаю. Я бы хотел, чтобы она НЕ запускала новую версию каждый раз, а просто открывала новая страница в текущей открытой, если она уже запущена.
Для окон я использую:
ShellExecute(NULL,"open",filename,NULL,NULL,SW_SHOWNORMAL);
Для Linux я сейчас использую:
pid_t pid;
char *args[2];
char *prog=0;
char firefox[] = {"/usr/bin/firefox"};
if (strstri(filename,".html"))
prog=firefox;
if (prog)
{
args[0]=(char *)filename;
args[1]=0;
pid=fork();
if (!pid)
execvp(prog,args);
}





Если вы пишете это для современных дистрибутивов, вы можете использовать xdg-open:
$ xdg-open http://google.com/
Если вы используете более старую версию, вам придется использовать команду для рабочего стола, например gnome-open или exo-open.
Измените его на / usr / bin / xdg-open
Если вы не хотите задействовать дополнительные приложения, просто используйте встроенные команды удаленного управления firefox. Например:
firefox -remote 'openurl(http://stackoverflow.com)'
См. Подробное использование на http://www.mozilla.org/unix/remote.html
xdg-open - это новый стандарт, и вы должны использовать его, когда это возможно. Однако, если дистрибутиву больше нескольких лет, он может не существовать, а альтернативные механизмы включают $ BROWSER (более старый стандарт), gnome-open (Gnome), kfmclient exec (KDE), exo-open (Xfce), или самостоятельно разбирать mailcap (обработчик text / html, скорее всего, будет браузером).
При этом большинство приложений не утруждают себя такой большой работой - если они созданы для конкретной среды, они используют механизмы запуска этой среды. Например, в Gnome есть gnome_url_show, в KDE есть KRun, большинство терминальных программ (например, mutt) анализируют mailcap и т. д. Жесткое кодирование браузера и разрешение дистрибьютору или пользователю отменять значение по умолчанию также является обычным явлением.
Я не предлагаю жестко кодировать это, но если вы действительно хотите открыть новую вкладку в Firefox, вы можете использовать «firefox -new-tab $ URL».
Примечание для xdg-open: проверьте http://portland.freedesktop.org/wiki/, раздел «Использование Xdg-utils»; в нем говорится, что вы можете включить сценарий xdg-open в свое собственное приложение и использовать его в качестве запасного варианта, если в целевой системе еще не установлен xdg-open.
так что могу ли я просто изменить имя программы с «/ usr / bin / firefox» на «xdg-open»?