Я пытаюсь создать правило udev, которое скрывает блочные устройства (например, USB-накопители) размером менее 64 ГБ.
Правило выглядит так:
BUS=="usb", SUBSYSTEM=="block", ACTION=="add", PROGRAM="/data/diskSizeCheck.pl %k", RESULT!="ok", ENV{UDISKS_PRESENTATION_HIDE}="1", GOTO="usb_mount_end"
Где usb_mount_end
— это просто метка в конце моего файла правил. %k
должно быть ядром устройства (т.е. sdb). Но даже когда я жестко задаю «sdb» в качестве параметра, этот параметр никогда не попадает в мой perl-скрипт, и диск всегда не проходит проверку размера, даже если он достаточно велик. Однако, когда я передаю sdb через командную строку, это работает.
Вот Perl-скрипт, который я использую:
#!/usr/bin/perl
use strict;
my $MINIMUM_DISK_SIZE = 64000000000;
my $kernel = $ARGV[0];
my $diskSize = `blockdev --getsize64 /dev/$kernel`;
chomp($diskSize);
if ($diskSize > $MINIMUM_DISK_SIZE) {
print "ok";
} else {
print "no";
}
Сценарий помечен как исполняемый и все такое, но когда я записал $kernel
в текстовый файл, текстовый файл оказался пустым, что заставило меня поверить, что переменная никогда не передается.
Как мне передать %k
в мой perl-скрипт?
Изменить, чтобы добавить: я запускаю все как root.
Отредактируйте, чтобы добавить: я думаю, что настоящая проблема заключается в том, что RESULT по какой-то причине неправильно фиксирует вывод моего скрипта.
/sbin/blockdev
)! 13.01.2015