轉(zhuǎn)載自:無需第三方 App愧膀,同樣可以把你的 iOS 設(shè)備變成 Mac「遙控器」 - 少數(shù)派
一個月前JailbreakHum同學(xué)寫了一篇《把你的 iOS 設(shè)備變成控制 Mac 的「遙控器」》胰蝠。碰巧我當(dāng)時也想要寫一篇類似的文章,當(dāng)這標(biāo)題映入眼簾嘴办,我心里便是咯噔一下,腦海里閃過 N 個加粗大字:「該死买鸽,我想寫的東西居然被搶先了涧郊!」。
不過眼五,仔細(xì)一讀妆艘,發(fā)現(xiàn)雖然晚了一步,但自己的方法還是有可取之處的看幼,簡單來講批旺,我的方法和 JailbreakHum 那篇文章實現(xiàn)的效果相同,都利用了 AppleScript诵姜,但是我不需要用Hazel汽煮,事實上無需任何第三方應(yīng)用,就可以實現(xiàn)通過 iPhone 來控制 Mac棚唆。
原理
想要遙控 Mac暇赤,關(guān)鍵就在于 Mac 上要有一個能根據(jù)手機(jī)上的指令自動觸發(fā) AppleScript 的后臺程序。但是宵凌,我們有沒有必要為了遙控 Mac 特意買一些應(yīng)用(比如 Hazel)鞋囊,然后單純?yōu)榱诉b控 Mac 就讓這些應(yīng)用常駐后臺,這是對金錢和內(nèi)存的雙重浪費瞎惫。
所以在我看來溜腐,這個用來觸發(fā) AppleScript 的扳機(jī)應(yīng)該滿足兩個條件:
這是一個我們本來就一直放在后臺的應(yīng)用坯门;
這個應(yīng)用最好免費。
好消息是逗扒,確實有兩個應(yīng)用完全符合要求古戴,它們就是 Message 和 Mail 兩個原生應(yīng)用。大多數(shù)人都不知道 Message 和 Mail 都自帶了自動運行 AppleScript 功能矩肩,下面請讓我一一介紹现恼。
通過 Message 操控 Mac
Message 啟用自動觸發(fā) AppleScript 的方法是在應(yīng)用偏好設(shè)置中打開 「通用 - AppleScript 處理程序」菜單,從中選擇我們想要運行的 AppleScript黍檩。
令人意外的是叉袍,蘋果已經(jīng)為我們準(zhǔn)備好了幾個十分有用的 AppleScript,例如用來遙控 iTunes 的 iTunes Remote Control刽酱。而這些用來運行的 AppleScript 就儲存在/Users/用戶名/Library/Application Scripts/com.apple.iChat/中喳逛。
點開這些 AppleScript 文件,在文件最開頭的是蘋果的免責(zé)聲明棵里,后面就是腳本代碼了润文,代碼的注解非常詳細(xì),即使不熟悉 AppleScript 的人也能大概看懂(學(xué)習(xí) AppleScript 的好教材)。
這里以選擇 iTunes Remote Control 為例。先讓我們來看一下這個 AppleScript 的效果固额。
首先,確保我們 Mac 上所使用的 iMessage 帳號與我們手機(jī)上的帳號不同(你可以先試一試如果賬號一樣會發(fā)生什么)骏掀。
然后,我們只要從 iPhone 上向電腦上的 iMessage 帳號發(fā)送play柱告,iTunes 就會被自動打開并播放音樂截驮,不僅如此,你還會收到 iMessage 回復(fù)告訴現(xiàn)在正在播放的是什么际度。除了 play 以外葵袭,其它指令還包括:
pause: 暫停
status: 播放狀態(tài)
next: 下一首
previous: 上一首
mute: 靜音
unmute: 解除靜音
help: 顯示幫助
但是,這個 AppleScript 有兩個小的問題甲脏。
1. 我們 Mac 上的 iMessage 帳號與 iPhone 上的一般是一樣的眶熬,我們不可能為了遙控器的需求,去讓 Mac 使用一個不同的賬號 块请,但請看代碼的這里:
on getCurrentiTunesTrack()
set theCurrentTrackMessage to "Not playing."
由于反饋信息 (theResponse) 被默認(rèn)為 「Unknown Command.」娜氏,即一旦收的任何沒有預(yù)先設(shè)定過的命令,Apple Script 都會自動回復(fù) 「Unknown Command」, 而 「Unknown Command.」 本身也并非定義過的指令墩新!所以當(dāng)自己給自己發(fā)送信息后會發(fā)生什么贸弥,相信聰明如你應(yīng)該明白了吧。
2. 萬一你的基(姬)友也看到了這篇文章海渊,趁你在開會時給你發(fā)了 「unmute」「play」那又該怎么辦……绵疲?
所以哲鸳,我們希望能通過「自己給自己發(fā)短信」的形式來激活這個 AppleScript,而且確保只有自己的 iMessage 賬號才能遙控 Mac盔憨。
為了解決這些問題徙菠,我想先簡單介紹一下這個 AppleScript 的代碼。代碼主要由兩部分組成郁岩,第一部分類似一個「控制器」(message received)婿奔,會在收到手機(jī)發(fā)來的信息時將命令提取出來,之后通知第二部分(runiTunesRemoteControl)用提取出的命令對 Mac 上的 iTunes 進(jìn)行操作问慎。
操作結(jié)束后萍摊,第二部分會生成一個反饋信息,并將它發(fā)回「控制器」如叼,再由「控制器」將反饋信息發(fā)給手機(jī)冰木。
可以想象,如果「控制器」能在收到信息時檢查一下信息是否來自我們本人笼恰,再決定是否通知第二部分進(jìn)行操作踊沸,并且能在發(fā)送反饋信息給手機(jī)前,確保不會再將 「Unknown Command.」 發(fā)回挖腰,一切不就解決了嗎雕沿?
因此我們的改動將集中在「控制器」,也就是這段代碼上:
on message received theMessage from theBuddy for theChat
-- 將命令(theMessage)傳到第一部分猴仑,并將反饋信息存在 theResponse 中
set theResponse to runiTunesRemoteControl(theMessage)
-- 向手機(jī)發(fā)送 theResponse
send theResponse to theChat
end message received
改動后:
on message received theMessage from theBuddy for theChat
set serviceBuddy to name of service of theBuddy
-- 檢查發(fā)送者是否是我自己
if serviceBuddy = myiMessageAccount then
set theResponse to runiTunesRemoteControl(theMessage)
-- 確保反饋不是 「Unknown Command.」
if theResponse ≠ "Unknown command." then
send theResponse to theChat
end if
end if
end message received
這樣一來,問題就算是解決了肥哎,當(dāng)然你也可以在此基礎(chǔ)上加上其他你想要的功能辽俗,例如關(guān)閉屏幕等。這些改動需要在代碼的第二部分中完成篡诽,只需要在多加幾個 「if」 條件語句即可崖飘。
如果你有一定編程基礎(chǔ)的話,這個腳本還可以變得更加強(qiáng)大杈女,它可以把手機(jī)上發(fā)來的信息直接輸入 Mac 的 Termial朱浴,這樣一來我們手機(jī)上的 Message 應(yīng)用可以變成一個類似 shell 的存在,可以動態(tài)執(zhí)行手機(jī)上傳來的命令达椰。
也就是說翰蠢,我們的手機(jī)可以遙控 Mac 干任何事情,如果有讀者有興趣啰劲,我會在更新時貼上實現(xiàn)方法梁沧。
通過 Mail 操控 Mac
相較于使用 Message, Mail 的好處在于可以設(shè)定不同規(guī)則觸發(fā)不同的 AppleScript蝇裤,這樣我們就沒有必要把所有 AppleScript 寫在一個文件里或是寫一個需要調(diào)度其他 AppleScript 的 AppleScript廷支。
除此以外频鉴,還有一個好處就是如果你是 Android 手機(jī),可能無法使用 iMessage 給自己發(fā)信息恋拍,但是 Mail 卻是完全通用的垛孔。
Mail 的設(shè)置相較 Message 容易,因為我們可以通過 Mail 直接設(shè)定 AppleScript 的觸發(fā)條件施敢,而不是在 AppleScript 里用代碼來判斷似炎。這樣對于沒有編程基礎(chǔ)的人來說更為簡單。
這里以添加一個能關(guān)閉屏幕的 AppleScript 為例悯姊。
1. 先創(chuàng)建一條關(guān)閉屏幕的 AppleScript羡藐,在應(yīng)用程序中打開「腳本編輯器」,新建一個 AppleScript悯许,命令很簡單仆嗦,只要輸入一行do shell script "pmset displaysleepnow"即可,之后保存先壕。
2. 打開郵件應(yīng)用瘩扼,在偏好設(shè)置里點擊「規(guī)則 - 添加規(guī)則」;
3. 在這里我們就可以設(shè)定條件垃僚,我們把條件設(shè)置為 「主題包含 Turn off the screen」 且 「發(fā)件人等于 XX@XXX.com(你的郵箱)」集绰,并在「就執(zhí)行下列操作」中選擇「運行 AppleScript」,然后選擇運行我們事先寫好的可以關(guān)閉屏幕的腳本谆棺,在運行完后視情況刪除郵件栽燕。
與 Launch Center Pro & Workflow 整合
所謂沒有最懶只有更懶,通過LCP與Workflow改淑,我們在遙控時就不用重復(fù)輸入命令了碍岔。
首先介紹 Message 版的設(shè)置方法:
1. 在 Workflow 里建立動作,在 Text 塊中輸入命令朵夏,這里以 「Pause」 為例蔼啦,然后添加一個 Send Message 塊。
2. 點擊右上角的齒輪仰猖,選擇 「Share Workflow」捏肢,在第二行中選擇 「Add to Launch Center」 。
3. 然后在 LCP 中饥侵,建立一個 Remote Control 組鸵赫,把 Workflow 放入即可。
這樣一來爆捞,我們就能兩鍵暫停 Mac 上的音樂了(因為發(fā)送信息還要點一次)奉瘤。
對于 Mail 版,操作則可以徹底一鍵化,因為 Workflow 可以在應(yīng)用內(nèi)發(fā)送郵件盗温。我們可以這樣設(shè)置 Workflow:
同樣藕赞,與 LCP 整合后:
寫在最后
我原來還想介紹一下如何用Command-C來遙控,但是因為 macOS Sierra 的新特性——通用剪貼板卖局,Command-C 可以說已經(jīng)退出了歷史的舞臺斧蜕。
同時我也要感謝 JailbreakHum 的文章,結(jié)合他的文章砚偶,讀者們也許可以學(xué)到更多批销。
希望大家能在這篇文章里學(xué)到一些有用好玩的技巧。
參考文章: