bash 스크립트에 마운트된 파티션을 표시하는 노틸러스 방지

bash 스크립트에 마운트된 파티션을 표시하는 노틸러스 방지

내 bash 스크립트에서는 파티션을 마운트하고 확인하고 파일을 복사하고 마운트 해제합니다. 스크립트가 파티션을 마운트하면 Nautilus는 파티션을 표시하고 포커스를 훔치는 창을 표시합니다. 이것은 내가 피하고 싶은 것입니다.

참고: 시스템 설정, 세부 정보, 이동식 미디어에서 이 동작을 변경할 수 있다는 것을 알고 있지만 Never prompt or start programs on media insertion동작을 변경하고 싶지는 않습니다. 예를 들어 USB 스틱이 연결된 경우 bash 스크립트에서 이를 방지하고 싶습니다. . 이 스크립트는 다른 사용자의 컴퓨터에서 실행되기 때문에 스크립트에서 이러한 설정을 수정할 수 없습니다. 스크립트가 비정상적으로 종료되면 수정된 설정이 그대로 유지되기 때문입니다(또한 이렇게 할 필요가 없다고 생각합니다).

실제로 이 자동 표시는 일관성이 없어 보입니다. 터미널에서 똑같은 명령을 실행하면 Nautilus가 표시되지 않으며 내 스크립트에 표시되지 않는 다른 마운트가 있다는 것을 알고 있습니다. 그렇다면 이 문제의 원인은 무엇일까요? 다음은 코드의 예입니다(두 가지 모두 별도의 노틸러스 창이 팝업됩니다).

mount $dev $target
mkdir -p $target/home
mount $homedev $target/home

마운트가 노틸러스에 신호를 보내는 프로세스와 이런 일이 발생하는 이유(터미널에서 파티션을 마운트하지 않는 경우)를 이해하고 싶습니다. 그리고 이런 일이 발생하지 않도록 하는 가장 좋은 방법은 무엇입니까?

나는 이 동작이 릴리스 11.10부터 시작되는 것을 발견했습니다(제 기억이 정확하다면). 현재 12.04를 실행 중이지만 스크립트는 지원되는 모든 릴리스에서 작동해야 합니다. 저는 솔루션에 시스템 설정 수정이 포함되어야 한다고 생각하지 않습니다(릴리스마다 다를 수 있음). 예를 들어, 파티션을 마운트하는 다른 항목(예: os-prober)을 살펴보면 다른 파티션을 마운트할 때 노틸러스 창이 나타나지 않습니다.

스크립트를 찾을 수 있습니다여기. 그리고여기 그 부분이 있어요노틸러스가 나타나는 곳. 그것도 뜬거 같은데여기, 하지만 저는 첫 번째 링크에 테스트를 집중해 왔습니다.이것다른 마운트보다 먼저 호출되어 팝업되지 않는 곳입니다. 첫 번째 마운트를 --read-only 및 if 문 내에서 다시 작성했지만 아무런 차이가 없습니다.

이상적으로 답변은 이런 일이 발생하는 이유와 이를 방지하는 방법을 설명합니다. 즉, 내부 스크립트가 mount터미널에서 실행된 것과 다르게 처리되는 이유를 설명합니다. 완벽하게 설명된 솔루션이고 모든 데스크톱 환경(ubuntu, kubuntu, xubuntu, lubuntu 등)을 지원할 수 있는 실용적인 솔루션이라면 좋은 해결 방법도 허용됩니다. 또한 이를 확인하기 위한 테스트가 기하급수적으로 증가하는 것을 피하고 싶습니다.

미리 감사드립니다

============

다음과 같은 솔루션파파쇼님의 링크:

add_udev_rules ()
{
    for i in "$dev" "$homedev" "$bootdev" "$usrdev"; do
      if [ -n "$i" ]; then
        block=${i#/dev/}
        echo "KERNEL==\"""$block""\",ENV{UDISKS_PRESENTATION_HIDE}=\"1\"" >> "$wubi_move_dir"/wubi_move.rules
      fi
    done
    cp "$wubi_move_dir"/wubi_move.rules /etc/udev/rules.d/wubi_move.rules
    udevadm trigger > /dev/null 2>&1
}

remove_udev_rules ()
{
    rm /etc/udev/rules.d/wubi_move.rules
    rm "$wubi_move_dir"/wubi_move.rules
    udevadm trigger > /dev/null 2>&1
}

이렇게 하면 원하는 결과를 얻을 수 있지만 큰 망치로 접근하는 것처럼 느껴집니다. 나는 파티션이 마운트될 때 팝업 없이 노틸러스(및 기타 파일 브라우저)에 계속 표시되도록 udev에 미세 조정이 있을 것이라고 생각합니다. 그런데 누구든지 이것을 시도하고 싶다면 다음 스크립트는 노틸러스의 팝업 효과를 표시합니다.

mkdir -p /tmp/testmount
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1 
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1 
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1 
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1 
rmdir /tmp/testmount

계속 가지고 놀 예정 udev이고, 신청서도 제출했어요벌레, 삽입되지 않은 파티션이 마운트 시 삽입된 USB/미디어 카드처럼 작동하는 경우 이는 의미가 없기 때문입니다. 또한 udevadm trigger(적어도 12.04에서는) 모든 것을 일시적으로 동결시키는 저렴한 작업이 아닙니다.

요약하면, 실행 가능한 솔루션(도와주신 모든 분들께 감사드립니다)이 있습니다. 이를 구현하거나 구현하지 않을 수도 있습니다(아직 확실하지 않음). 하지만 난 계속해서 다른 걸 찾아볼 거예요. 감사해요

답변1

다음 제안을 시도해 보세요.http://www.worldofnubcraft.com/969/hide-your-disks-or-partitions-from-nautilus/

나는 그것이 udev 신호 및 처리와 관련이 있다고 확신합니다.

답변2

스크립트를 래핑해 보세요.

#!/bin/bash
#

# disable nautilus automount
#
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  false

# put your script here  
#
...

# enable back nautilus automount
# 
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  true

10.04이기 때문에 테스트되지 않았습니다.

업데이트:

#!/bin/bash
#

# disable nautilus automount
#
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  false

# put CALLING your script here to survive its crashes
#
/bin/bash -c "/whenever/it/is/placed/script.sh"

# enable back nautilus automount
# 
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  true

답변3

새로운 udev 규칙을 추가하면 플래시 드라이브 자동 마운트를 방지할 수 있습니다. 해당 규칙에서는 공급업체, 일련 번호, 기타 속성을 기준으로 플래시 드라이브를 지정할 수 있습니다. 보다ATTRS{}출력의 라인:

udevadm info -a --name=sdb1

당신이 배치해야 할 스크립트/etc/udev/rules.d특별한 파일 이름을 가진 폴더, 예: 81-usb-wubi-move.rules

규칙은 다음과 같습니다.

ACTION=="add", KERNEL=="sdb?", SUBSYSTEMS=="usb", ATTRS{serial}=="001CC07CEE5EFB91C91B235C", ENV{UDISKS_PRESENTATION_HIDE}="1", ENV{UDISKS_PRESENTATION_NOPOLICY}="1"

또한보십시오:

답변4

및 플래그를 mount사용해 보십시오 .-n-i

관련 정보