在Linux / X11上以编程方式启动独立的Adobe Flash Player
从命令行启动.flash文件时,独立的flashplayer不会接受任何参数。我需要播放器进入全屏显示,没有窗口边框等。程序启动后,可以通过按ctrl + f来完成此操作。我想以编程方式执行此操作,因为我需要它在没有任何人工干预的情况下进入全屏模式。
我的猜测是,我需要一些如何获取窗口的句柄,然后向其发送类似于" ctrl + f"键的事件。
如果有什么不同,则好像flashplayer是gtk应用程序,并且我安装了pygtk的python。
更新(我使用的解决方案...感谢ypnos的回答):
./flashplayer http://example.com/example.swf & sleep 3 && ~/xsendkey -window "Adobe Flash Player 10" Control+F
解决方案
实际上,我很久以前就做过,但这并不算小。我们所做的是使用Sawfish窗口管理器,并编写了一个钩子来识别flashplayer窗口,然后剥离所有装饰并将其全屏捕捉。
通过从外部应用程序注册X窗口创建事件而无需使用窗口管理器,这是可能的,但是我对X11不够熟悉,无法告诉我们如何实现。
另一种选择是编写一个pygtk应用程序,该应用程序将独立的Flash Player嵌入gtk.Socket内,然后自行调整大小。经过一番思考,这可能是我们最好的选择。
我们可以使用专用的应用程序将击键发送给窗口管理器,如果该窗口作为屏幕上的活动窗口启动,则应将其传递给闪存。但是,由于启动Flash和显示窗口之间存在延迟,因此这很容易出错。
例如,脚本可以执行以下操作:
Flashplayer * .swf
睡眠3 && xsendkey Control + F
可以在以下位置找到应用程序xsendkey:http://people.csail.mit.edu/adonovan/hacks/xsendkey.html
如果没有给定特定的窗口,它将把它发送到由窗口管理器处理的根窗口。我们还可以尝试使用xprop或者与其相关的一些东西先找出Window ID。
另一个选项是窗口管理器,它可以记住设置并自动应用它们。例如,Fluxbos提供了此功能。如果flashplayer支持调整大小,则可以将fluxbox设置为使Window不带有装饰,并将其拉伸到整个屏幕。这也不太好,因为它可能会影响我们打开过的所有Flash Player窗口。
nspluginplayer --fullscreen src=path/to/flashfile.swf
来自http://gwenole.beauchesne.info//en/projects/nspluginwrapper
我已经使用openbox使用了与bmdhacks提到的机制类似的机制来完成此操作。我从中注意到的是,独立Flash播放器在最大化未修饰窗口中的全屏性能比同一个播放器差得多。 (令人讨厌的是,由于菜单栏的原因,它没有正确地全屏显示)。我想知道如何使用自定义gtk主题运行它以使菜单不可见。不过,这只是性能问题。如果全屏目前可以正常运行,那么它就不必要地复杂了。我在OLPC XO上运行,性能在那儿更成问题。
我对nspluginplayer的运气不太好(我认为是越野车)。
最终,我可以奢侈地制造正在运行的闪存,因此我可以简单地将代码放入闪存本身。同样,由于我们可以将Flash嵌入Flash中,因此应该可以制作一个小的存根swf,该存根swf会自动全屏显示并包含目标sfw。
我们必须使用Acton脚本3 cmd:
stage.displayState = StageDisplayState.FULL_SCREEN;
请参阅Adobe Action script 3编程。
但请注意:在全屏模式下,我们将失去显示性能!
我有这个问题...在Linux下更多!!!