2011-06-18 17 views
4

私はLuaでファン制御スクリプトを書いています。私はLinuxを使っています。ファンコントロールは/ sys /に書き込む必要がありますので、スーパーユーザーになる必要があります。スクリプトがスーパーユーザーとして実行されているかどうかを確認するにはどうすればよいですか?

スーパーユーザーでないユーザーに通知したいと考えています。これを行う最善の方法は何ですか?

答えて

5

特定の唯一のテストは、POSIX geteuid() callがゼロを返すかどうかを確認することです。

このため、luaposixのようなLuaライブラリを使用する必要があります。

id -uをシェルして実行して、0が出力されているかどうかを確認することができます。

+0

ありがとうございます。 :) –

1

それは、Linuxですので、あなたが株式のLuaであり、追加のライブラリを必要としない、これを試すことができます。

function running_as_root() 
    local f=io.open"/root" 
    if f==nil then return false else io.close(f) return true end 
end 

しかし、なぜちょうど/ SYSへの書き込みをしてみてください/それが発生した場合、障害を報告していませんか?

+0

ioを実行しようとするのは面倒ですが、失敗した場合は根本ではありません。あなたが私を得るなら、私はハッキーなものを探していました。しかし、有効な提案はあなたに+1してください:) –

+0

すべてのLinuxシステムに "/ root"ディレクトリがあるわけではありません。 – Nemo

+0

しかし、彼らは "/"を持っています。 "/ bin"や "/ usr"はおそらく同じくらい良いでしょう。しかし、私はここでlhfに同意します。計画されたIOを実行し、失敗した場合にルートにする必要があるという丁寧なメッセージで失敗します。 – RBerteig

0

最高のことは、単に失敗報告です:ルート以外のユーザーがsysfsにアクセスできるシステムを持つことができます。

fd = assert(io.open("/sys/....")) 
関連する問題