1

uinputが実行/ロードされ、動作することを確認しようとしています。

lsmodでデバイスを見つけることができませんが、ファイル/ dev / uinputを見つけることができます。これはどういう意味ですか?

どうやらuinputをテストするグーグルでコードを見つけましたが、「Unable tocreateUINPUTdevice」で失敗します。端末に印刷されます。関連するコードは次のとおりです。

if (ioctl(uinp_fd, UI_DEV_CREATE))
{
  printf("Unable to create UINPUT device.");
  return -1;
}

完全なコードはここで読むことができます:http://pastebin.com/tJdUgiDz

だから私の質問は次のようになります:

uinputはロードされていますか?もしそうなら、なぜこのコードは正しく機能しないのですか?

ありがとう。

4

1 に答える 1

2

uinputはカーネルにコンパイルされており、lsmodで見られるようなロード可能なモジュールではないようです。これは間違いなくUbuntu12.04に当てはまります。

パーミッションの問題が原因で、オープンが失敗している可能性があります。

$ ls -l /dev/uinput
crw-r----- 1 root root 10, 223 Sep 22 11:45 /dev/uinput

プログラムを実行するたびに、rootとしてプログラムを実行できます。

$ sudo ./mytest-program

または、udevルールを作成して、すべてのプログラムがuinputを使用できるようにします。以下の貼り付けコマンドをコピーして、ubuntu 12.04システムで正しいルールを作成し、udevサービスを再起動して使用します

$ sudo bash -c 'echo -e "# allow programs without root permissions to use uinput\n KERNEL==\"uinput\", MODE=\"0666\"" >> /etc/udev/rules.d/50-uinput.rules'
$ sudo restart udev

セキュリティに関心がある場合は、グループのルールを設定し、実行可能ファイルをsetuid/setgidすることができます。

于 2012-09-28T18:04:23.337 に答える