【问题标题】:Send a Ruby script from a linux box to a remote mac mini to open and close an application将 Ruby 脚本从 linux 机器发送到远程 mac mini 以打开和关闭应用程序
【发布时间】:2015-06-21 23:32:31
【问题描述】:

我需要将 Ruby 脚本从 Linux 机器发送到远程 Mac Mini 以打开和关闭应用程序。

我对 Ruby 不太熟悉,主要是 AppleScript。有没有办法将我的 AppleScript 嵌入到 Ruby 脚本中?或者有没有办法只使用 Ruby?

这是我要发送的 AppleScript:

cat  osascript -e 'tell application "Finder" of machine "eppc://USERNAME:PASSWORD@IP" open file "Macintosh HD:Applications:Kodi" end tell'

【问题讨论】:

  • 您想使用 Ruby 发送命令吗?你试过什么?有很多方法可以将脚本移动到另一台机器然后启动它,因此我们需要知道您可以使用哪些协议,例如 FTP、SFTP、SSH 等,因为这些决定了您如何移动文件并执行它。因为有很多未知数,所以需要一本书来涵盖使这个问题过于广泛的可能性。
  • 我还没有尝试过任何东西。我试图收集更多信息,所以我知道我在做正确的事情。正如我所说,我不熟悉applescript 之外的任何脚本。这是我通过“sclibridge 是主机上的命令行程序,用于与 Savant 控制系统进行交互以进行高级定制”从我购买 Linux 盒子的公司那里得到的。
  • 抱歉信息不足。我是新手哈哈。 SSH 是我相信他们使用的协议。他们向我描述的关于向系统添加脚本的所有其他内容都是使用 SSH。
  • 他们也发给我了。
  • 智能主机 (Linux OS) 位置:/usr/local/bin/sclibridge 自定义脚本和工作流需要注意这种差异。您可以使用一个名为“uname”的通用 UNIX 实用程序来确定您的脚本在哪个平台上运行并相应地进行调整。

标签: ruby linux macos applescript home-automation


【解决方案1】:

我在“Calling Applescript from Ruby”找到了下面的脚本。

def osascript(script)
  system 'osascript', *script.split(/\n/).map { |line| ['-e', line] }.flatten
end

【讨论】:

  • 不要说“这里”。相反,如果人们点击链接,请告诉他们他们将在哪里登陆的信息。这是使用超文本的一种更友好、更温和的方式。
【解决方案2】:

OP 的问题措辞很糟糕。通过网络搜索:

Savant 是一个托管在 OS X 上的家庭自动化系统。不幸的是,该网站全是闪存,没有实质内容,所以我放弃了在那里寻找文档。

scli 是一个基于命令行的远程管理程序,用于通过SNMP 控制诸如路由器之类的联网设备(并且可能是运行 Savant 服务器的无头 Mac Mini)。大概sclibridge 是特定于供应商的实现;这不是一个常见的术语。

scli[bridge] 是否用于直接控制 Savant 尚不清楚,但我猜可能不是:它似乎有点低级和通用,所以可能只是用于管理 Mac 本身。很可能它包含一个向远程机器发送 shell 命令的选项,避免了一直在 sclissh 之间跳转的需要,但我没有费心去详细阅读。

我不知道 OP 是如何从那里开始想要运行 Ruby 脚本的,也不知道为什么他们的示例代码想要通过远程 Apple 事件与他们的 Mac 通信,而这在 Linux 上是不可用的。我怀疑这主要是由于糟糕的供应商文档造成的混乱。

无论如何,假设他们可以使用sclissh 来运行远程*nix 命令,最简单的方法是向Mac 添加一堆可执行的AppleScript,然后Linux 机器可以远程执行就像任何其他 shell 命令一样。例如将以下内容另存为名为 kodi-remote 的纯文本(未编译的 AppleScript)文件:

#!/usr/bin/osascript

on run argv 
    -- argv : list of string -- any arguments to `kodi-remote` command

    if argv is {} or item 1 of argv is "help" then
        log "Usage: kodi-remote [ run | quit | help ]"
        return
    end if

    set cmd to item 1 of argv
    if cmd is "run" then
        tell application "Kodi" to run
    else if cmd is "quit" then
        tell application "Kodi" to quit
    else
        error "Unknown command: " & cmd number 1
    end if
end run

使用chmod +x kodi-remote 使其可执行并将其放在远程shell 可以找到它的位置(例如/usr/local/bin)。

您可以通过在 Terminal.app 中打开一个新窗口并运行来在本地测试它:

kodi-remote run
kodi-remote quit

然后,相同的命令应该可以在您用于在 Linux 机器上运行远程 shell 命令的任何地方工作。

【讨论】:

    猜你喜欢
    • 2018-05-31
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多