【问题标题】:Programmatically launching standalone Adobe flashplayer on Linux/X11在 Linux/X11 上以编程方式启动独立的 Adob​​e flashplayer
【发布时间】:2012-12-09 15:30:23
【问题描述】:

当您从命令行启动时,独立的 flashplayer 不接受除 .swf 文件之外的任何参数。我需要播放器全屏显示,没有窗口边框等。这可以通过在程序启动后按 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

【问题讨论】:

  • +1 好问题! :) 我一直在寻找这个

标签: python linux adobe x11 flash


【解决方案1】:

您可以使用专门的应用程序将击键发送到窗口管理器,然后如果窗口作为屏幕上的活动窗口启动,它应该将其传递给 flash。不过,这很容易出错,因为启动 flash 和窗口出现的时间之间存在延迟。

例如,您的脚本可以执行以下操作: 闪存播放器 *.swf sleep 3 && xsendkey Control+F

应用程序 xsendkey 可以在这里找到:http://people.csail.mit.edu/adonovan/hacks/xsendkey.html 如果没有给定一个特定的窗口,它会将其发送到由您的窗口管理器处理的根窗口。您也可以先尝试使用 xprop 或与之相关的东西来找出 Window id。

另一个选项是窗口管理器,它能够记住您的设置并自动应用它们。例如 Fluxbos 就提供了这个功能。如果 flashplayer 支持调整大小,您可以设置 Fluxbox 以减少 Window 装饰并将其拉伸到整个屏幕。这也不太好,因为它可能会影响您打开的所有 flashplayer 窗口。

【讨论】:

  • xprop + xsendkey 可以解决问题。一旦我得到了所有管道和 awk 的东西来自动化它,我将发布我的确切 bash 命令。
  • ./flashplayer example.com/example.swf & sleep 3 && ~/xsendkey -window "Adobe Flash Player 10" Control+F
  • +1 完美答案。对于那些在编译xsendkey 时遇到问题的人:gcc -o xsendkey -lX11 xsendkey.c
【解决方案2】:

其实我很久以前就做过了,但不是小事。我们所做的是使用Sawfish window manager 并编写一个钩子来识别flashplayer 窗口,然后剥离所有装饰并全屏捕捉。

这可能在不使用窗口管理器的情况下,通过从外部应用程序注册 X 窗口创建事件来实现,但我对 X11 不够熟悉,无法告诉你如何做到这一点。

另一种选择是编写一个 pygtk 应用程序,将独立的 Flash 播放器嵌入到 gtk.Socket 中,然后调整自身的大小。经过一番思考,这可能是您最好的选择。

【讨论】:

    【解决方案3】:
    nspluginplayer --fullscreen src=path/to/flashfile.swf
    

    来自 [http://gwenole.beauchesne.info//en/projects/nspluginwrapper](nspluginwrapper 项目)

    【讨论】:

      【解决方案4】:

      另一种选择是编写一个 pygtk 应用程序,将独立的 Flash 播放器嵌入到 gtk.Socket 中,然后调整自身的大小。经过一番思考,这可能是您最好的选择。

      这正是我所做的。除此之外,我的播放器通过 Xcomposite、Xfixes 和 Cairo 缩放 Flash 内容。在这里可以找到包含 python 源的 .deb: http://www.crutzi.info/crutziplayer

      【讨论】:

        【解决方案5】:

        我使用 openbox 完成了这项工作,使用的机制与 bmdhacks 提到的机制类似。我从中确实注意到的是,独立的 Flash 播放器在全屏时的表现比在最大化的未装饰窗口中的相同播放器要差得多。 (由于菜单栏,令人讨厌的是不能正确全屏)。我想知道使用自定义 gtk 主题运行它以使菜单不可见。不过,这只是一个性能问题。如果全屏当前可以正常工作,那么它会非常复杂。我在 OLPC XO 上运行,那里的性能更成问题。

        我在使用 nspluginplayer 时运气不佳(我认为这太麻烦了)。

        最终,我有幸制作了正在运行的闪存,因此我可以简单地将代码放入闪存本身。类似地,既然你可以在 flash 中嵌入 flash,那么应该可以制作一个自动全屏并包含目标 sfw 的小存根 swf。

        【讨论】:

          【解决方案6】:

          你必须使用Acton script 3 cmd:

          stage.displayState = StageDisplayState.FULL_SCREEN;
          

          请参阅 Adob​​e Action 脚本 3 编程。

          但要小心:在全屏下,你会失去显示性能!

          我遇到了这个问题...在 Linux 下更多!!!

          【讨论】:

            猜你喜欢
            • 2011-01-15
            • 1970-01-01
            • 1970-01-01
            • 2015-06-01
            • 1970-01-01
            • 2011-02-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多