タグ付けされた質問 「udev」

Udevは、/ devの下のデバイスファイルエントリを管理するLinuxプロセスです。

3
USBキーはマウントするたびに同じ名前になりますか?
私はbashスクリプトを介して毎日データを保存するために使用されるUSBキーを持っています。次のコマンドを使用して、特定のユーザーがフォルダーを書き込むことができるように、なんとかマウントしました。 mount /dev/sdc1 /media/usb -o rw,uid=sysop,gid=sysop スクリプトは、必要に応じてディレクトリを実行および作成でき、完璧です。ある時点で、USBキーが取り外され、新しいキー(同じモデル)に交換されます。新しいUSBキーにはまだ名前/dev/sdc1がありますか、それとも別のものですか? それが別のものである場合、それを自動的に作成するために、スクリプトに取り付け部品をどのように含めることができますか?

1
UUIDを使用してディスク全体(/ dev / sda)を参照する
私のシステム(Debianの)上で、私は見ることができますUUID私のディスク・パーティションのすべての識別子を(すなわち/dev/sda1、dev/sda2..) ls /dev/disk/by-uuid/ ただし、それ自体のUUID識別子は表示されません/dev/sda。でディスク全体を参照することは可能UUIDですか? 特定のディスクを参照したいので、これが必要です/dev/sda。 編集 @don_crisstiによって提案されたソリューションは素晴らしいです。ただし、UUIDは、同じモデル/製造元のすべてのハードディスクで同じであり、シリアル番号で一意ではないようにしてください。 を使用するudevadmと、ディスクの属性を確認できます。 udevadm info -n /dev/sda -a ATTRS{model}=="Samsung SSD 840 " ATTRS{vendor}=="0x8086" ATTRS{class}=="0x010700" ATTRS{device}=="0x1d6b" .... UUIDこれらの属性からを生成して、同じモデル/メーカーのディスクが同じになるようにするにはどうすればよいUUIDですか?
9 udev  disk  fdisk  uuid 

2
複製されたLinuxシステムと/etc/udev/rules.d/70-persistent-net.rules
Ubuntuシステムをセットアップし、での定義eth0を含め、適切に構成しました/etc/network/interfaces。次に、そのシステムをイメージ化し、新しいシステムに複製しました。 初めてシステムを起動したときはすべて問題ありませんでしたが、数回再起動すると、ネットワーク構成のタイムアウトが発生しました。ログインしたところ、それeth0が利用できないことがわかりました。 私の最初の研究は、私が試してみましょうifdown -aとifup -aどの私は明白な効果に数回やりました。 調査の結果/etc/udev/rules.d/70-persistent-net.rules、私はに向けられましたが、新しいシステムのMACアドレスがeth1を作成していることがわかりました。いい考えですが、私がしたかったことではありません。 今起動したところ/etc/udev/rules.d/70-persistent-net.rules、6つの異なるHWアドレスに対して6つのエントリがあることがわかりました。これは、インターフェイスが1つしかないために奇妙なことです。 私の質問は次のとおりです。私の使用は、ifup -aどういうわけか、作成される新しいMACアドレスを作成しましたか?そうでない場合、これがどのように発生したかについて何か考えはありますか?/etc/udev/rules.d/70-persistent-net.rules現在のハードウェアアドレスの名前を変更しましたがeth0、機能しているようですが、再起動してもアドレスが変更されないことは保証されますか?

2
自分のinitrdをビルドするときに/ devディレクトリを作成する方法は?
私はinitrdについて何かを学ぼうとしています。私はこのチュートリアルに従って自分のinitrdをゼロから構築し、それにbusyboxをインストールしました。次に、isolinuxを使用して.isoを作成し、virtualboxでテストできるようにしました。それはうまくいきます! 私はbusyboxからの基本的なコマンドを持っているので、ファイルシステムをマウントしたいと思いました。しかし、チュートリアルに従って作成した一部のファイルを除いて、/ devディレクトリはほとんど空です(sdaなし)。私はudevについて学び、これが私が必要としていることだと思います。しかし、私はこれをどう進めるかわかりません。 udevから最新のソースコードを取得してコンパイルし、initrdに追加する必要がありますか?そして、私のinitスクリプトで/ bin / udevまたはそのようなものを呼び出しますか?または、/ devディレクトリにデータを追加する他の/より良い方法はありますか? 編集:追加情報と私がすでに行ったことに関する更新。 私は仮想ボックスですべてをテストします。私は仮想ボックスにubuntuミニマルをインストールし、initrdから.isoを作成して、virtualboxのisoから起動しました。 私はvmlinuzを使用し、/lib/modulesそれはdebian-businesscard.isoに存在し、以前にリンクしたチュートリアルに従って作成したinitrdにそれらをコピーしました。 カーネルは CONFIG_DEVTMPFS=y /devtty0〜tty63など、一部のデバイスはに表示されますが、sda / hdaは表示されません。 蘭lspci -k私の現在実行中のOSで仮想ボックスでは使用されているモジュールを確認してください。モジュールとしてSATA Controller使用すると言いahciます。 私は実行するとmodprobe -v ahci、それの後に、それはのようなものを返します。それは「ata_some_stuff未知のシンボル」について多くのことを不平を言うSCSI Subsystem initialized、ATA-6: VBOX HARDDISKとDirect-Access ATA VBOX HARDDISK。ただし、まだハードドライブデバイスが見つかりません/dev。 私の現在の/init/スクリプトは次のとおりです: #!/bin/ash mount -t devtmpfs none /dev mount -t proc /proc /proc mount -t sysfs none /sys modprobe -v ahci echo …
9 udev  initrd 

2
Wifiカードが接続されたときにスクリプトを自動実行(udev)
私はudev、ワイヤレスカードが接続されているときに、Debianシステムにbashスクリプトを実行させるために使用しようとしています。 これまでのところ、私はこのファイルを作成しました/etc/udev/rules.d/wifi-detect.rules: ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/root/test.sh" そして今のところ、私はtest.shこのコンテンツを機能させるようにしています: #!/bin/bash /bin/echo "test!" > /test.txt しかし、何らかの理由で、ワイヤレスカードを接続しても何も起こらないようで、test.txtファイルが作成されません。 私lsusbのカード: Bus 001 Device 015: ID 0cf3:9271 Atheros Communications, Inc. AR9271 802.11n udevadm monitor –envこれを実行すると、カードを接続するとどうなりますか。 KERNEL[1017.642278] add /devices/platform/bcm2708_usb/usb1/1-1/1-1.3 (usb) KERNEL[1017.644676] add /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0 (usb) KERNEL[1017.645035] add /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/firmware/1-1.3 (firmware) KERNEL[1017.708056] remove /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/firmware/1-1.3 (firmware) UDEV [1017.714772] add /devices/platform/bcm2708_usb/usb1/1-1/1-1.3 (usb) UDEV …


2
LVMボリュームの所有権(またはグループ)を永続的に変更する
LVMボリュームの所有権(または少なくともグループ)を永続的に変更するにはどうすればよいですか? 私はudevを使用する必要があると考えましたが、ルールがどのように見えるべきかわかりませんか? LVM /ディスクの所有権をユーザー/グループの仮想ボックスに変更したいとしましょう。
9 permissions  lvm  udev 

3
USBデバイスの偽のシリアル番号
USB経由でPCに携帯電話を接続しています。 を使用してデバイス情報を表示する場合 sudo udevadm info --attribute-walk 製品とベンダーIDは問題なく表示されますが、ATTR {serial}はありません。私が使用しているアプリケーション(Android adb)が正常に動作するには、デバイスがシリアル番号を報告する必要があります。 たとえばudevルールを使用して、デバイスのシリアル番号を偽造できる方法はありますか? 明確化:問題は、USBデバイスのシリアル番号を取得する方法ではなく、シリアル番号を設定する方法です。 USB経由でシリアル番号を報告しないAndroidフォンを持っていましたが、adbツールはこれをあまり好きではありませんでした。これまでのところ、これに対する簡単な解決策はないようです。ただし、適切なAndroidスマートフォンを開発用に購入することは非常に簡単です。
9 usb  udev 

2
lsusbによって返されたバス/デバイス番号に物理USBデバイスパスをマップします
接続されているUSBデバイスのタイトルを取得する必要があります。私はそれを行うことができますlsusb。 udevは、ルールを記述するときにいくつかの置換を許可します。たとえば、$kernelデバイスの名前$devpathを取得したり、デバイスへのパスを取得したりすることができます。 しかし問題はそのlsusbような文字列を返すことです: Bus 005 Device 032: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC しかし、udevのdevpathは次のとおりです。 /devices/pci0000:00/0000:00:1d.0/usb5/5-2 バス番号は同じ(5)ですが、番号が異なります。Device 032論理的な番号のように見え(デバイスを再接続すると、この番号が増加します)、2物理的なデバイス番号のようです。 そのため、udevは物理番号を返し、論理番号を取得する必要があります。次に、次のようにデータを取得できます。lsusb -D /dev/bus/usb/005/032 では、どうすれば032物理パスで論理デバイス番号を取得でき/devices/pci0000:00/0000:00:1d.0/usb5/5-2ますか?
9 usb  devices  udev 

2
Linuxでの完全な自動マウントソリューションのudev、udisks、autofs、通知設定に必要な提案
Linuxでプラグインされたデバイスの自動マウントを続行します。Gentooを実行して、ラップトップ上のローカルデバイスとネットワークデバイスの組み合わせをautofs-5.0.4-r5で自動マウントしています。autofsを単独で実行すると、いくつかの不満が生じます。 デバイスごとにマウントポイントの名前を事前に定義する必要がありますが、MMCカードリーダーを再起動した後、起動可能なUSBスティックで位置を切り替えます 自動LABELベースのマウントポイントを表示したいのですが、autofsだけではAFAIKでそれを行うことはできません これは、udevとudisksが確かに実行できることです。だが: デバイスのプラグイン時にファイルシステムが自動的にマウントされないようにするには、LABELというゴーストマウントポイントを指定します 実際のファイルシステムのマウントは、autofsゴーストが機能するのと同じように、マウントポイントへの最初のアクセス時にのみ発生します。これにより、優れたアクセス性を提供しながら、誤ってデバイスを取り外してファイルシステムを汚すリスクを減らすことができます。 これに加えて、DEで何が起こっているかをいつでも知ることができます。 すべての自動マウントのステータスを表示できるシステムトレイアプリはありますか。つまり、緑=何もマウントされておらず、赤=何かがマウントされていますか? たとえば、notify-sendを使用して、ファイルシステムの(アン)マウント操作通知を提供する配布に依存しない方法はありますか?Gentoo固有のものはどうですか、それは私にとってもうまくいきます。udevのスクリプトはNFSとCIFSに役立ちませんよね? このコンボは、最終的な自動マウントセットアップにする必要がありますか、それとも何か不足していますか?


1
非決定的グラフィックカードのデバイス名
私のシステムには3つのグラフィックカード、1つのradeonと2つのnvidiaが含まれています。 マルチシートセットアップを設定しようとしていますが、グラフィックカードの「デバイス名」が安定しておらず、ブートごとに変更されます。 例 ブート1 Radeonカード /sys/devices/pci0000:00/0000:00:03.0/0000:01:00.0/drm/card1 NVIDIA 1カード /sys/devices/pci0000:00/0000:00:1c.0/0000:02:00.0/drm/card0 Nvidia 2カード /sys/devices/pci0000:00/0000:00:1c.4/0000:04:00.0/drm/card2 ブーツ2 Radeonカード /sys/devices/pci0000:00/0000:00:03.0/0000:01:00.0/drm/card0 NVIDIA 1カード /sys/devices/pci0000:00/0000:00:1c.0/0000:02:00.0/drm/card1 Nvidia 2カード /sys/devices/pci0000:00/0000:00:1c.4/0000:04:00.0/drm/card2 等... この問題は、デバイスのシートへの割り当てがこれらのデバイス名に基づいているため、マルチシート構成を不安定にします(私はloginctlを使用します)。別の実際の問題は、これがカーネルレベルとXorgレベルの両方でグラフィックカードのコネクタ名を変更する(つまり、VGA-1がVGA-2になるなど)ため、xorg.confを介してモニター構成を実行したり、「 video = "カーネルオプション。これは、セットアップでEDIDのない古いcrtモニターを強制的に有効にするために必要です。 この「card0」「card1 ...」が非決定的であるのは正常ですか、バグまたは構成可能なもの(udevまたはそのようなもの)ですか? 編集: ユーザー@dirktがコメントで言ったように、systemdレベルではこれは非決定的であり、実際にはマルチシート構成自体は問題ありません。私の主な問題は、出力名の信頼性の低さです。カーネルレベルで「video = VGA-1:e」を指定して出力を強制的に有効にする必要があります。そして、私はxorgレベルで使用する必要があります Option "Monitor-VGA-1" "Monitor-x"。

3
レノボドッキングとLinuxのディスプレイを自動的に切り替える
私はnvidia optimusとミニドッキングステーションシリーズ3を備えたlenovo thinkpadを持っています。 ドッキングしている間、可能であれば自動的に外部モニターに切り替わり、ドッキングを解除すると自動的にthinkpad lcdに切り替わります。 暗号化されたディスク(dm-crypt)のパスワードを入力する必要があるため、これはブートステージでも機能するはずです。 私は以下を試しましたが、うまくいきません: 次の行を含むファイル/etc/acpi/thinkpad-undock.sh(+ chmod a+x thinkpad-undock.sh)を作成しました。 #!/bin/sh xrandr --output LVDS-1 --auto --output DP-5.8 --off そしてまた /etc/acpi/thinkpad-dock.sh #!/bin/sh prime-select nvidia # ensures that nvidia card is selected xrandr --output LVDS-1 --off --output DP-5.8 --auto そして再びchmod a+x thinkpad-dock.sh。 両方のスクリプトの実行は手動で機能します。 イベントを処理するために2つのファイルを作成しました。 thinkpad-dock-lenovo event=ibm/hotkey LEN0068:00 00000080 00004010 action=/etc/acpi/thinkpad-dock.sh そしてまた …
8 linux  udev  xrandr  acpi  thinkpad 

1
Bashスクリプトを改善する
問題なく問題なく実行されるように、Bashスクリプトを改善する必要があります。このスクリプトはそのds4drv中で使用しており、修正方法がわからない問題があります。 最初の問題は、コントローラーが検出されたときに常に実行または機能するとは限らないことです。そのためにudevルールを作成しましたが、検出されたときにこのスクリプトが常に実行されない理由が明確ではありません。 2番目の問題は、ds4drv通常のユーザーとして実行されるのではなく、rootとしてのみ実行できるようにすることです。 3番目の問題は、作成されたPIDロックファイルを処理する適切な方法がわからないため、PIDプロセスが存在しなくなったときに、PIDロックファイルが削除されるためです。実行中のインスタンスが1つだけになるように、bashスクリプトでPIDファイルを使用する方法に関する適切なドキュメントを見つけるのは困難です。 ここにds4drvのudevルールがあります: 50-ds4drv.rules KERNEL=="uinput", GROUP="users", MODE="0666" KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="05c4", GROUP="users", MODE="0 666" KERNEL=="hidraw*", SUBSYSTEM=="hidraw", KERNELS=="0005:054C:05C4.*", GROUP="users" MODE="0666" ACTION=="add", SUBSYSTEM="usb", ATTRS{idProduct}=="054c", RUN+="/home/user/scripts/ds4check.sh", GROUP="users" , MODE="0666" それはudevルールがそうあるべきであると私はかなり確信しています、それはGROUPユーザーのための読み書きなので、パーミッションは私にとって正しいようです。bashスクリプトが実行され、コントローラーデバイスが接続されたときにこのルールが自動的に実行されるように設定されると、コントローラーデバイスが接続されていない場合など、一部のゲームが応答しなくなるという問題のいくつかのインスタンスがあるようです作用することが/dev/js0なく、その代わりに作用する/dev/js1代わりに。特にrootとして実行されていない場合、このエラーを返すことがよくあります。 OSError: [Errno 13] Permission denied: '/dev/input/event17' そしてもちろんbashスクリプト。 ds4check.sh #!/bin/bash # DS4 Check Script pidfile=/tmp/ds4drv.pid # check if process is already running …


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.