2013-10-14 51 views
4

我正在尋找一種方式來確定本地輸入(鼠標/鍵盤)的空閒時間, 通過SSH,遠程無法訪問或訪問當前登錄的用戶Xauthority遠程Linux本地用戶的空閒時間

我知道下面的解決方案,如果您有機會獲得X服務器,其工作原理: detecting keyboard, mouse activity in linux

是可能的,但無需連接到X服務器? 還有別的辦法嗎?例如。間接通過某些進程的CPU或內存使用情況? 歡迎任何想法。

回答

7

使用w和/ dev解決方案只會讓你滿意,因爲它可能是用戶在身邊,但沒有在shell中鍵入任何內容 - 例如,他/她可能正在玩某個遊戲。更好的方法是輪詢/ proc /中斷。鼠標和鍵盤的本地中斷通常在「i8042」之下(儘管在極少數情況下可能不同)。您可能想嘗試:「grep i8042/proc/interrupts」。這將產生IRQ 1(鍵盤)和IRQ 12(通常是鼠標)。你可以得到這些值,存儲它們,然後偶爾進行輪詢(無回調,唉),以獲得計數。如果數字發生變化,則發生中斷 - 意味着鍵盤(IRQ 1)或鼠標(IRQ 12)被觸摸/按下等。按鍵通常會產生兩個中斷(按鍵,按鍵)。鼠標移動更不穩定。

這有幾個優點:

1)如果用戶這麼多,因爲觸及鼠標或按下某個鍵 - 你知道 2)你可以這樣做編程方式(即fopen()函數的/ proc /中斷,或(可選)/ proc/stat,並獲得「intr」行)和fread()相關行 3)您甚至不需要爲此設置root。

+0

這很酷。雖然它似乎不適用於USB鍵盤/鼠標的權利? –

+0

我剛查過,也有usb中斷。但是它們會定期發生。所以我可以減去這個比率來看看是否有額外的事件。這應該工作。 –

+0

不適用於USB,正確,但USB仍是中斷源。所以是的。與i8042相比,相關可能不是1:1,但是 - 完全相同 - 當用戶處於活動狀態時,您將得到一個非零值 - 這正是您想要的。 – Technologeeks

1

作爲一個非特權用戶,我試圖通過監視使用目標用戶標識生成的新進程來實現這一點。如果你看到一個新的過程,那麼很可能是用戶造成了它的誕生,除非它的父母是cron(或者少數類似的主管之一,你必須在你的系統上嘗試它,並且過濾掉一些錯誤你首先得到的警報)。

這不會給你一個非常精確的空閒時間,但也許是一個最大的界限。如果你想要更精確的東西,你可能應該有權這樣做。

+0

用戶可以在不創建新進程的情況下處於活動狀態(在編輯器中編寫內容) –

1

命令wls -l /dev/pts是我能想到的最好的。在它們之間,你可以在Linux控制檯,ssh和xterm會話中看到閒置的非常好的視圖。

如果用戶只是坐在玩firefox或其他東西的本地玩物上,這並不能抓住它,但我不確定如果沒有X或root權限,你可以得到它。尋找CPU的使用是不可靠的,因爲很多應用程序即使在空閒時也使用一點cpu,或者在使用時幾乎爲零,而且看/ proc/x_server_pid/*也沒有幫助,因爲即使用戶閒置。

尋找像其他答案一樣的新進程如果/ dev/pts沒有幫助,並且實際上無法查看輸入,我認爲是最好的。