Scripting

連接網際網路後立即執行 redshift

  • September 15, 2016

我已經redshift安裝在我的筆記型電腦中,並且我已經配置為在啟動時執行它。但是,它需要有效的 Internet 連接才能執行。但問題是,我的 ISP 要求我在獲得活動連接之前登錄。因此,啟動後無法立即建立連接,因此 redshift 無法執行。

有什麼方法可以在我獲得活動連接後立即自動執行 redshift?我在 KDE 上。

我假設您正在使用可以自由連接的這些網路之一,但需要通過 Web 身份驗證服務才能在其他任何地方發送請求。

想到的第一個解決方案是編寫一個包裝腳本redshift,並在開始之前定期檢查 Internet 連接redshift。之後您要做的就是設置該腳本在啟動時執行,而不是redshift它本身。這是第一個例子:

#!/bin/bash
while ! ping -qw1 -c1 8.8.8.8 >/dev/null 2>&1; do
   # As long as we can't ping Google's DNS, sleep.
   sleep 5
done

exec /path/to/redshift # We exited the loop, we can run redshift.

現在有了這個解決方案,仍然有可能出現誤報。如果 ICMP 數據包沒有被阻止,而是像其他流量一樣被重定向(到身份驗證伺服器),你會得到一個 ECHO 回复,只是不是來自正確的目標……解決這個問題的一個簡單方法是使用 HTTP而是請求,並檢查頁面的內容,以防我們被提供身份驗證頁面。

#!/bin/bash
while ! wget -qO- http://example.com/ | grep -q Example; do
   sleep 5
done

exec /path/to/redshift

無論您選擇什麼解決方案,都不要忘記讓您的腳本可執行:

$ chmod +x redshift_at_boot.sh

然後您所要做的就是執行該腳本而不是redshift在啟動時執行。如果您不需要以 root 身份執行,您可以從 KDE 的System settings > Startup & shutdown > Autostartredshift安排該腳本。如果它確實需要 root 權限,那麼請了解如何在啟動時為您的發行版安排事情。使用 KDE 功能的另一種可能性是在腳本中添加or after (假設您不介意密碼提示)。gksudo``pkexec``exec

引用自:https://unix.stackexchange.com/questions/310159