Arch-Linux

GDM 登錄 GNOME 後執行腳本?

  • September 25, 2014

ssh我最近買了一台筆記型電腦,並編寫了一個腳本,如果某個使用者通過 GDM 登錄,它會設置一個反向隧道。我這樣做是因為我過去曾有一台筆記型電腦被盜,並希望為再次發生這種情況做好準備。

每當使用者登錄時,我將腳本放在 GDM 以 root 身份執行的目錄中。

/etc/gdm/PostLogin/Default

這是腳本本身:

if [[ "$(users)" = "user user" ]]; then
  while (( "$(netstat -an | grep -E "\:22[ \t]+" | grep ESTABLISHED | \
   wc -l)" < "1" ))
     do
     ssh -fvN -p 22 -R tunnelport:localhost:sshdport user@example.com
     sleep 20
  done
fi

如果我已經登錄,腳本就會執行,但如果我通過 GDM 登錄,第一條if語句就會失敗。如果我刪除該if語句,那麼它會掛在ssh命令上。關於我能做什麼的任何想法?

我將啟用此腳本,使其冗長並將其輸出寫入文件,以便您可以更輕鬆地確定是什麼絆倒了它。

if為了增加冗長,在第一個語句之前添加這個。

set -x

要讓腳本將所有內容記錄到文件中,您可以使用此 SO Q&A 中描述的方法,標題為:如何完全記錄所有 bash 腳本操作?. 以下是該文章的大部分摘錄:

#!/bin/bash
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>log.out 2>&1
# Everything below will go to the file 'log.out':

解釋:

  1. exec 3>&1 4>&2

保存文件描述符,以便它們可以恢復到重定向之前的任何內容,或者使用它們自己輸出到以下重定向之前的任何內容。 2. trap 'exec 2>&4 1>&3' 0 1 2 3

恢復特定信號的文件描述符。通常不需要,因為它們應該在子 shell 退出時恢復。 3. exec 1>log.out 2>&1

將 stdout 重定向到文件 log.out,然後將 stderr 重定向到 stdout。請注意,當您希望它們轉到同一個文件時,順序很重要。在將 stderr 重定向到 stdout 之前,必須重定向 stdout。

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