특정 USB 장치가 DE 및 사용자의 systemd 및 udev에 연결되면 스크립트를 실행합니다.

특정 USB 장치가 DE 및 사용자의 systemd 및 udev에 연결되면 스크립트를 실행합니다.

주제가 많다는 건 알지만 아직은 불분명해요.

첫째, USB 장치가 연결될 때 실행되는 시스템 서비스, 스크립트 및 udev 규칙이 있습니다. 이것은 예상대로 작동합니다.

[Unit]
After=run-media-serg-GARMIN.mount
Description=Backup garmin activities when Garmin 830 is connected
Requires=run-media-serg-GARMIN.mount

[Service]
Environment="LOCALE_ARCHIVE=/nix/store/ckkhm153z75sw6z5nr277kvn2pi4z8jy-glibc-locales-2.35-224/lib/locale/locale-archive"
Environment="PATH=/nix/store/l6jgwxkc3jhr029vfzfwzcy28iyckwsj-coreutils-9.1/bin:/nix/store/gn1s1s5z19cf0wiir2cd38jckcjc6kn6-findutils-4.9.0/bin:/nix/store/pvb117r7fhwb08717ks21a6y9hlnp63b-gnugrep-3.7/bin:/nix/store/v0hg83sdv4v51c0prmdigry6wdmmpzmp-gnused-4.8/bin:/nix/store/jnrdsg66spsm9n9amz5lspigdds7nrmf-systemd-251.16/bin:/nix/store/l6jgwxkc3jhr029vfzfwzcy28iyckwsj-coreutils-9.1/sbin:/nix/store/gn1s1s5z19cf0wiir2cd38jckcjc6kn6-findutils-4.9.0/sbin:/nix/store/pvb117r7fhwb08717ks21a6y9hlnp63b-gnugrep-3.7/sbin:/nix/store/v0hg83sdv4v51c0prmdigry6wdmmpzmp-gnused-4.8/sbin:/nix/store/jnrdsg66spsm9n9amz5lspigdds7nrmf-systemd-251.16/sbin"
Environment="TZDIR=/nix/store/z0kg1c0f8fx6r4rgg5bdy01lb2b9izqg-tzdata-2023a/share/zoneinfo"


ExecStart=/nix/store/fqr3f89hajwb0s5s50kd72jp8a93xipm-garmin-backup/bin/garmin-backup
Type=forking
ACTION=="change", SUBSYSTEM=="block",
        ENV{ID_VENDOR_ID}=="091e", ENV{ID_MODEL_ID}=="2c32", ENV{ID_SERIAL}=="Garmin_GARMIN_Flash-0:0",
    ENV{SYSTEMD_WANTS}=="${garminService}.service"

하지만 제가 정말 마음에 들지 않는 점은 마운트 지점이 하드코딩되어 있다는 것입니다. 예를 들어 systemd 서비스의 "after" 및 "requires" 줄은 현재 사용자 이름에 따라 달라집니다. 다른 데스크탑 환경에서도 마운트 지점이 항상 정확히 동일할지 확신할 수 없습니다.

이 문제를 해결하기 위한 내 아이디어 중 하나는 다음과 같습니다.

  1. udev 규칙에서 자동 마운트 비활성화
  2. 항상 동일한 위치에 마운트되는 systemd 마운트 서비스를 만듭니다.

하지만 어쩌면 더 간단한 해결책이 있을 수도 있습니다. 도와주세요?

답변1

USB 장치에 대한 /etc/fstab 항목을 만듭니다(현재 파일 시스템 레이블을 사용하므로 LABEL=을 통해 참조하거나 /dev/disk/by-id 또는 이와 유사한 항목을 통해 참조). UDisks2는 이동식 장치를 마운트할 때 기본 구성 대신 fstab 구성을 사용합니다. (단, systemd .mount 유닛은 전혀 신경쓰지 않습니다.)

DE가 UDisks2를 사용하여 권한 있는 작업을 수행하는 한 /run/media 경로는 DE에만 해당되지 않습니다. 장치는 udisks(8)에 설명된 대로 udev 속성을 통해 UDisks2에 대한 "공유"로 표시될 수 있습니다. ENV{UDISKS_FILESYSTEM_SHARED}블록 장치에서 이 값을 1로 설정하면 UDisks2가 항상 해당 장치가 아닌 /media/LABEL에 마운트하게 됩니다. -사용자 경로.

관련 정보