Программный запуск автономного Adobe flashplayer в Linux/X11

Автономный flashplayer не принимает никаких аргументов, кроме файла .swf, когда вы запускаете его из командной строки. Мне нужно, чтобы плеер работал в полноэкранном режиме, без границ окон и тому подобного. Это можно сделать, нажав Ctrl+F после запуска программы. Я хочу сделать это программно, так как мне нужно, чтобы он запускался в полноэкранном режиме без какого-либо взаимодействия с человеком.

Я предполагаю, что мне нужно каким-то образом получить дескриптор окна, а затем отправить ему событие, похожее на нажатие клавиши "ctrl+f".

Если это имеет какое-то значение, похоже, что flashplayer - это приложение gtk, и у меня установлен python с pygtk.

ОБНОВЛЕНИЕ (решение, которое я использовал... благодаря ответу ypnos):

./flashplayer http://example.com/example.swf & sleep 3 && ~/xsendkey -window "Adobe Flash Player 10" Control+F

person Aaron    schedule 02.10.2008    source источник
comment
+1 Отличный вопрос! :) Я искал это некоторое время   -  person Jimithus    schedule 12.05.2011


Ответы (6)


Вы можете использовать специальное приложение, которое отправляет нажатие клавиши диспетчеру окон, который затем должен передать его во флэш-память, если окно запускается как активное окно на экране. Однако это довольно подвержено ошибкам из-за задержек между запуском флэш-памяти и появлением окна.

Например, ваш скрипт может сделать что-то вроде этого: flashplayer *.swf sleep 3 && xsendkey Control+F

Приложение xsendkey можно найти здесь: http://people.csail.mit.edu/adonovan/hacks/xsendkey.html Без указания конкретного окна он отправит его в корневое окно, которое обрабатывается вашим оконным менеджером. Вы также можете сначала попытаться выяснить идентификатор окна, используя xprop или что-то связанное с ним.

Другим вариантом является оконный менеджер, который может запоминать ваши настройки и автоматически их применять. Например, Fluxbos предоставляет эту функцию. Вы можете установить fluxbox, чтобы сделать окно без декора и растянуть его на весь экран, если flashplayer поддерживает изменение размера. Это также не очень хорошо, так как это, вероятно, повлияет на все окна flashplayer, которые вы когда-либо открывали.

person ypnos    schedule 02.10.2008
comment
xprop + xsendkey делает свое дело. Я опубликую свою точную команду bash, как только разберусь со всеми конвейерами и awk, чтобы автоматизировать ее. - person Aaron; 03.10.2008
comment
./flashplayer example.com/example.swf & sleep 3 && ~/xsendkey -window Adobe Flash Player 10 Ctrl+F - person Aaron; 14.02.2009
comment
+1 Идеальный ответ. Для тех, у кого проблемы с компиляцией xsendkey: gcc -o xsendkey -lX11 xsendkey.c - person Jimithus; 12.05.2011

Я на самом деле сделал это давным-давно, но это не было мелко. Мы использовали оконный менеджер Sawfish и написали хук для распознавания окна flashplayer, а затем снимите все украшения и сделайте снимок на весь экран.

Это может быть возможно без использования оконного менеджера путем регистрации событий создания X-окна из внешнего приложения, но я недостаточно знаком с X11, чтобы рассказать вам, как это можно сделать.

Другим вариантом было бы написать приложение pygtk, которое встроило бы автономный флеш-плеер в gtk.Socket, а затем изменило бы его размер. После небольшого размышления это может быть вашим лучшим выбором.

person bmdhacks    schedule 02.10.2008

nspluginplayer --fullscreen src=path/to/flashfile.swf

который находится на [http://gwenole.beauchesne.info//en/projects/nspluginwrapper](nspluginwrapper)

person Community    schedule 10.11.2008

Другим вариантом было бы написать приложение pygtk, которое встроило бы автономный флеш-плеер в gtk.Socket, а затем изменило бы его размер. После небольшого размышления это может быть вашим лучшим выбором.

Это именно то, что я сделал. Кроме того, мой плеер масштабирует флеш-контент через Xcomposite, Xfixes и Cairo. .deb, включая исходный код python, можно найти здесь: http://www.crutzi.info/crutziplayer

person Jens    schedule 04.06.2012

Я сделал это с помощью openbox, используя механизм, аналогичный тому, который упоминает bmdhacks. Из этого я заметил, что автономный флеш-плеер работал значительно хуже в полноэкранном режиме, чем тот же плеер в развернутом окне без оформления. (что, к сожалению, не является полноэкранным из-за строки меню). Мне было интересно запустить его с пользовательской темой gtk, чтобы сделать меню невидимым. Это всего лишь проблема с производительностью. Если в настоящее время полноэкранный режим работает нормально, то это излишне сложно. Я работал на OLPC XO, производительность здесь важнее.

Мне не очень повезло с nspluginplayer (я думаю, он слишком глючный).

В конце концов, я смог позволить себе роскошь сделать флеш-память, которая работала, чтобы я мог просто поместить код в саму флеш-память. Аналогичным образом, поскольку вы можете встраивать флэш-память во флэш-память, должна быть возможность сделать небольшую заглушку swf, которая автоматически переходит в полноэкранный режим и содержит целевой sfw.

person Lerc    schedule 16.02.2010

Вы должны использовать сценарий Acton 3 cmd:

stage.displayState = StageDisplayState.FULL_SCREEN;

См. Программирование Adobe Action script 3.

Но будьте осторожны: в полноэкранном режиме вы потеряете производительность дисплея!

У меня такая проблема... больше под линуксом!!!

person Daniel    schedule 22.10.2010