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


8

내 bash 스크립트에서 파티션을 마운트하고 확인하고 파일을 복사하고 마운트 해제합니다. 스크립트가 파티션을 마운트하면 노틸러스는 파티션과 스틸 포커스를 보여주는 창을 띄웁니다. 이것은 내가 피하고 싶은 것입니다.

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

실제로이 자동 디스플레이는 일관성이없는 것 같습니다. 터미널에서 정확히 동일한 명령을 수행하면 노틸러스가 표시되지 않으며 스크립트에 표시되지 않은 다른 마운트가 있음을 알고 있습니다. 이 문제의 원인은 무엇입니까? 다음은 코드의 예입니다 (둘 다 별도의 노틸러스 창이 팝업 됨).

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

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

릴리스 11.10부터이 동작이 시작되었습니다 (정확하게 리콜하는 경우). 현재 12.04를 실행하고 있지만 지원되는 모든 릴리스에서 스크립트가 작동해야합니다. 솔루션에 시스템 설정 수정이 필요하다고 생각하지 않습니다 (릴리스에 따라 다를 수 있음). 예를 들어, os-prober와 같은 파티션을 마운트하는 다른 것을 보면 다른 파티션을 마운트 할 때 노틸러스 창이 나타나지 않습니다.

스크립트는 여기 에서 찾을 수 있습니다 . 그리고 여기 노틸러스가 터지는 부분 입니다. 나는 또한 여기 에 팝업 생각 하지만, 나는 첫 번째 링크에 내 테스트를 집중하고 있습니다. 이것은 다른 마운트 전에 호출되지 않는 곳입니다. 첫 번째 것을-읽기 전용으로 if 문 내에서 다시 작성했는데 아무런 차이가 없습니다.

이상적으로는 왜 이런 일이 발생하는지, 어떻게 방지하는지, 즉 스크립트 내 mount에서 터미널에서 발행 된 것과 다르게 취급 되는 이유를 설명 할 것 입니다. 모든 데스크탑 환경 (ubuntu, kubuntu, xubuntu, lubuntu 등)을 지원할 수있는 완전히 설명 된 솔루션이고 실용적인 경우에도 좋은 해결 방법을 사용할 수 있습니다. 또한 검증을위한 테스트의 기하 급수적 인 증가를 피하고 싶습니다.

미리 감사드립니다

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

papashou 의 링크에 따른 솔루션 :

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에) 모든 것을 일시적으로 고정시키는 저렴한 작업은 아닙니다.

그래서 요약하면, 나는 실행 가능하거나 확실하지 않은 실행 가능한 솔루션 (도움을 준 모든 사람에게 감사)을 가지고 있습니다. 그러나 나는 다른 것을 계속 찾을 것입니다. 감사


다른 사람들이 대답하기 위해 Ubuntu 버전을 추가 할 수 있습니까? 예 : 9.04, 10.10, 12.04. 서로간에 약간의 진화가있었습니다.
Paul

좋은 지적. 질문을 편집하여 추가하겠습니다.
bcbc

-i를 마운트하면 노틸러스가 팝업되지 않습니까? 화면 하단의 작은 대화 상자로 gnome-shell이 ​​팝업되지 않도록하는 데 효과적입니다. 이것은 gnome-shell을 사용하여 12.04 Ubuntu에서 테스트되었습니다.
Gary

그것은 나에게 아무런 차이가 없습니다.
bcbc

<p> _ 터미널에서 정확히 같은 명령을 수행하면 노틸러스가 표시되지 않습니다 _-스크립트는 어떻게 시작합니까? </ p> <p> 그리고 스크립트에 표시되지 않는 다른 마운트가 있다는 것을 알고 있습니다.이 마운트의 차이점은 무엇입니까? </ p>
zuba

답변:


3

이 제안을 시도하십시오 : http://www.worldofnubcraft.com/969/hide-your-disks-or-partitions-from-nautilus/

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


3
여기에 링크의 내용을 간결하게 게시 할 수 있습니까? 링크 만있는 답변은 AU 커뮤니티에서 환영받지 못합니다.
Mahesh

작동합니다. 현재 답변을 수락 할 세부 사항이 너무 적습니다. 파일을 만들고 호출하는 데 작동하는지 수동으로 확인했습니다 udevadm trigger. 스크립트에서 작동하는지 확인하고 싶습니다. 여기에 더 추가하지 않은 경우 질문에 세부 정보를 게시하겠습니다.
bcbc

링크가 이미 명확하게 정리 한 것을 다시 요약하고 싶지 않았습니다. 기본적으로 udev에게 특정 장치를 처리하지 않도록 지시하는 규칙을 /etc/udev/rules.d/에 추가해야합니다. 각 장치는 다음을 지정하여 고유 한 회선을 갖습니다. KERNEL ==”sda1 ″, ENV {UDISKS_PRESENTATION_HIDE} =”1 ″. 그렇게해도 시스템이나 커널 동작은 수정되지 않습니다. 디스크의 프리젠 테이션을 숨기도록 UDEV에 지시합니다. 노틸러스는 정확하게이 동작을 위해 udev 규칙 처리에 의존합니다.
papashou

1

스크립트를 래핑하십시오.

#!/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

제안 해 주셔서 감사합니다 ... 설정이 즉시 적용되는지 확실하지 않기 때문에 설정을 수정하고 싶지 않습니다. 각 릴리스마다 다른 코드가 필요하며 우아하지 않으며 스크립트가 중단되면 사용자를 떠나게됩니다. 바람직하지 않은 상태에서-나는 그것이 필요하다고 생각하지 않습니다. 내가 따르는 것은 노틸러스에 마운트를 알리는 메커니즘과 마운트를 우회하는 방법입니다. 예를 들어 udev? dbus? 그런 종류의.
bcbc

+ 즉시 적용되는지 확실하지 않기 때문에 설정을 수정하고 싶지 않습니다. 확인해야 할 질문입니다. + 각 릴리스에 대한 서로 다른 코드를 필요 가 - 필요하거나 하지 않을 수 ) 50 것처럼 나는 거리에서 다이노을 만날 수) + | (50) 는 우아하다 - 어떤 대안을 비교?
zuba

+ 스크립트가 중단되면 사용자가 바람직하지 않은 상태에 있게됩니다. 중단되면 많은 패키지 (예 : 적성). 그 부작용을 피하기위한 접근법이 있습니다. 예를 들어 스크립트가 실행 중이고 설정을 다시 변경하지 않을 경우 1 분마다 cron을 청구 할 수 있습니다. 또는 설정을 제어하는 ​​다른 스크립트에서 스크립트를 실행할 수 있습니다.
zuba

요점은 데스크탑 특정 설정을 변경할 필요가 없다는 것입니다. 또한이 스크립트는 ubuntu / xubuntu / kubuntu / lubuntu 등에서 실행될 수 있으므로 복잡성과 위험성이 높아집니다.
bcbc

udisk를 사용하여 파티션을 블랙리스트에 올리는 대안 (파파시 링크 참조)은 sudo를 필요로하며 시스템간에 이식성이 없으므로 훨씬 더 복잡하고 위험합니다.
Egil

1

새로운 udev 규칙을 추가하여 플래시 드라이브 자동 마운트를 방지 할 수 있습니다. 이 규칙에서 공급 업체, 일련 번호 및 기타 속성으로 플래시 드라이브를 지정할 수 있습니다. 다음 출력에서 ATTRS {} 행을 참조하십시오 .

udevadm info -a --name=sdb1

이 스크립트 는 특수 파일 이름 (예 : 81-usb-wubi-move.rules) 으로 /etc/udev/rules.d 폴더에 배치해야합니다.

규칙은 다음과 같습니다

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

또한보십시오:


이것은 가능한 해결 방법이 될 것 같습니다. 이것을 검토하고 실험 할 시간이 필요하며 오늘까지 기회가 없습니다 (그런 다음 피드백을 줄 것입니다). 이상적으로 대답은 왜 이런 일이 발생하는지 설명 mount합니다 (터미널에서 실행하는 것과 비교할 때 ).하지만 좋은 해결 방법을 찾으면 그도 받아 들일 것입니다.
bcbc

이것은 하나입니다
RobotHumans

0

테스트되지 않은 .... 그냥 직감.

노틸러스 사용자가 액세스 할 수없는 트리에 파일 시스템을 마운트하십시오 (예 : / root 또는 / home / someoneelse의 서브 디렉토리 또는 다른 사람이 소유하고 보안하는 / tmp 서브 디렉토리)

동일한 하드웨어 장치를 두 개의 마운트 지점에 마운트하고 둘 다에서 수정하는 것은 좋지 않을 수 있습니다.

(12.04beta) Ubuntu-> System Settings-> Details-> Removable Media에서 일부 사람 구성이 가능합니다. 일부 옵션은 "아무것도하지 않음"으로 설정되어 팝업을 피할 수 있습니다.

https://help.ubuntu.com/community/Mount/USB 의 설명서는 9.10에 유용하지만 12.04에서는 작동하지 않습니다. 언급 한 gconf-editor의 키는 더 이상 사용되지 않습니다.


/ tmp (및 다른 곳) 아래 디렉토리에 마운트됩니다.
bcbc

그러나 로그인 한 사용자는 여전히 / tmp에 액세스 할 수 있습니다. 로그인 한 사용자가 액세스 할 수없는 디렉토리를 사용하는 것이 좋습니다.
Paul

내가 사용 chmod 700약속, 후 (아무 창 제목)를 메시지 창을 튀어 ... 디렉터리에 보았다 : "어떤 응용 프로그램이 파일을 처리로 등록되지" "10기가바이트 파일 시스템의 폴더를 열 수 없습니다"
bcbc

매혹적인. 확실히 노력합니다. 어쩌면 나는 나중에 이것으로 놀 시간이있을 것입니다.
Paul

0

시도 mount-n-i플래그.


나는 그것을 시도했다-내가 할 수있는 모든 마운트 옵션을 거의 통과했다. 트리거가 다른 곳에서 발생하고 있습니다.
bcbc
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.