Helpers - компьютеры, интернет, программирование

Параметр из правила udev не передается в perl-скрипт

Я пытаюсь создать правило 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 по какой-то причине неправильно фиксирует вывод моего скрипта.

09.01.2015

  • После некоторой игры (настройка $kernel = "sdb" и изменение правила, так что если RESULT=="ok", то диск скрыт), я понял, что настоящая проблема заключается в том, что вывод моего скрипта по какой-то причине не захватывается РЕЗУЛЬТАТОМ. Я вызываю скрипт через командную строку просто с помощью ./diskSizeCheck.pl sdb 10.01.2015

Ответы:


1

с использованием

KERNEL=="sdc", SUBSYSTEMS=="block", ACTION=="add", PROGRAM="/usr/local/diskSizeCheck.pl %k", RESULT!="ok", ENV{UDISKS_PRESENTATION_HIDE}="1"

С diskSizeCheck.pl:

#!/usr/bin/perl
use strict;
use warnings;
open FH,">/tmp/diskSizeCheck";
print FH "Disk Size Check\n"; 

my $MINIMUM_DISK_SIZE = 64000000000;
my $kernel = $ARGV[0];
my $diskSize = `sudo blockdev --getsize64 /dev/$kernel`;
chomp($diskSize);

print FH "kernel = $kernel, $diskSize\n";

if ($diskSize > $MINIMUM_DISK_SIZE) {
    print FH "ok\n";
} else {
   print FH "no\n";
}

При вставке USB-накопителя я получил /tmp/diskSpaceSize:

Disk Size Check
sdc, 2005925888
no
10.01.2015
  • Спасибо! Этот вывод показал мне настоящую проблему: в моей версии udev для правильной работы требовался полный путь к blockdev (/sbin/blockdev)! 13.01.2015
  • Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..