Ngăn chặn nautilus hiển thị phân vùng được gắn trong tập lệnh bash


8

Trong tập lệnh bash của tôi, tôi gắn các phân vùng, kiểm tra chúng, sao chép các tập tin vào chúng và ngắt kết nối. Khi tập lệnh gắn kết phân vùng, Nautilus bật lên với một Cửa sổ hiển thị phân vùng và đánh cắp tiêu điểm. Đây là điều tôi muốn tránh.

Lưu ý: Tôi biết tôi có thể thay đổi hành vi của điều này trong Cài đặt hệ thống, Chi tiết, Phương tiện di động Never prompt or start programs on media insertion, nhưng tôi không muốn thay đổi hành vi, ví dụ: nếu cắm USB, tôi chỉ muốn ngăn nó trong tập lệnh bash của mình . Vì tập lệnh này chạy trên máy tính của người dùng khác, tôi không thể sửa đổi các cài đặt này (trong tập lệnh) bởi vì nếu nó bị chấm dứt một cách bất thường, nó sẽ giữ nguyên các cài đặt đã sửa đổi (tôi cũng không tin rằng cần phải làm điều này).

Trên thực tế, màn hình tự động này không có vẻ nhất quán. Nếu tôi thực hiện chính xác cùng một lệnh từ thiết bị đầu cuối, Nautilus sẽ không hiển thị và tôi biết có những thứ khác trong kịch bản của tôi không hiển thị. Vì vậy, những gì có thể gây ra điều này? Đây là một ví dụ về mã (cả hai đều khiến các cửa sổ nautilus riêng biệt bật lên):

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

Tôi quan tâm đến việc tìm hiểu quá trình gắn kết tín hiệu Nautilus và lý do tại sao điều này xảy ra (khi tôi không gắn kết phân vùng từ thiết bị đầu cuối). Và cách tốt nhất để ngăn chặn điều này xảy ra là gì.

Tôi nhận thấy hành vi này bắt đầu từ phiên bản 11.10 (nếu tôi nhớ lại chính xác). Tôi hiện đang chạy 12.04, nhưng tập lệnh phải hoạt động trên tất cả các bản phát hành được hỗ trợ. Tôi không tin giải pháp nên liên quan đến sửa đổi cài đặt hệ thống (có thể khác nhau giữa các bản phát hành). Ví dụ: nếu bạn nhìn vào những thứ khác gắn kết các phân vùng (như os-prober), không có cửa sổ nautilus nào bật lên khi nó gắn các phân vùng khác nhau.

Kịch bản có thể được tìm thấy ở đây . Và đây là phần mà Nautilus xuất hiện. Tôi nghĩ nó cũng xuất hiện ở đây , nhưng tôi đã tập trung thử nghiệm vào liên kết đầu tiên. Đây là nơi nó không bật, được gọi trước các gắn kết khác - lưu ý tôi đã viết lại những cái đầu tiên là - chỉ đọc và trong một câu lệnh if và nó không có gì khác biệt.

Lý tưởng nhất là câu trả lời sẽ giải thích tại sao điều này xảy ra và làm thế nào để ngăn chặn nó, nói cách khác, giải thích tại sao tập lệnh mountđược xử lý khác với tập lệnh được phát từ thiết bị đầu cuối. Một cách giải quyết tốt cũng sẽ được chấp nhận nếu đó là một giải pháp được giải thích đầy đủ và thực tế có thể hỗ trợ tất cả các môi trường máy tính để bàn (ubfox, kubfox, xubfox, mỡ Ubuntu, v.v.) - Tôi cũng muốn tránh sự gia tăng theo cấp số nhân trong kiểm tra để xác minh nó.

Cảm ơn trước

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

Giải pháp theo liên kết của 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
}

Điều này đạt được kết quả mong muốn, nhưng cảm thấy như một cách tiếp cận búa tạ. Tôi tin rằng có lẽ có một tinh chỉnh trong udev sẽ cho phép phân vùng vẫn hiển thị trong Nautilus (và các trình duyệt tệp khác) mà không bật lên khi được gắn. Nhân tiện, nếu bất cứ ai muốn thử điều này, đoạn script sau sẽ hiển thị hiệu ứng bật lên của nautilus:

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

Tôi sẽ tiếp tục chơi với udevvà tôi cũng đã báo lỗi , vì điều này không có ý nghĩa gì đối với một phân vùng không được chèn để hoạt động như một thẻ nhớ USB / thẻ nhớ được gắn khi gắn kết. Ngoài ra, udevadm triggerđây không phải là một hoạt động rẻ tiền xuất hiện (ít nhất là vào ngày 12.04) để tạm thời đóng băng mọi thứ.

Vì vậy, tóm lại, tôi có một giải pháp khả thi (nhờ mọi người đã giúp đỡ), mà tôi có thể hoặc không thể thực hiện (chưa chắc chắn); nhưng tôi sẽ tiếp tục tìm kiếm thứ gì đó khác Cảm ơn


Để người khác trả lời, bạn có thể thêm Phiên bản Ubuntu của mình không? ví dụ: 9.04, 10.10, 12.04. Có một chút tiến hóa từ người này sang người khác.
Paul

Điểm tốt. Tôi sẽ chỉnh sửa câu hỏi của tôi để thêm điều đó.
bcbc

nếu bạn gắn kết - tôi có giữ nautilus không bật lên không? Nó hoạt động với tôi để giữ cho gnome-shell không xuất hiện với hộp thoại nhỏ ở cuối màn hình. Điều này đã được thử nghiệm trên Ubuntu 12.04 bằng gnome-shell.
Gary

Điều đó làm cho không có sự khác biệt đối với tôi.
bcbc

<p> _Nếu tôi thực hiện chính xác cùng một lệnh từ thiết bị đầu cuối, Nautilus không hiển thị_ - Làm thế nào để bạn khởi chạy tập lệnh của mình? </ p> <p> và tôi biết có những thú cưỡi khác trong kịch bản của tôi không hiển thị - Sự khác biệt nào giữa các thú cưỡi này? </ p>
zuba

Câu trả lời:


3

Hãy thử đề xuất này: http://www.wworldofnubcraft.com/969/ leather-your-disks-or-partitions-from-nautilus /

Tôi khá chắc chắn rằng nó phải làm với tín hiệu udev và xử lý.


3
Bạn có thể đăng chính xác nội dung của liên kết ở đây không? Một câu trả lời chỉ với một liên kết không được chào đón trong cộng đồng AU.
Mahesh

Những công việc này. Hiện tại có quá ít chi tiết để chấp nhận câu trả lời. Tôi đã xác nhận bằng tay rằng nó hoạt động để tạo tập tin và gọi udevadm trigger. Chỉ muốn xác nhận nó hoạt động trong kịch bản. Tôi sẽ đăng chi tiết trong câu hỏi nếu bạn chưa thêm vào đây.
bcbc

Tôi không muốn tóm tắt lại những gì liên kết đã được trình bày rõ ràng. Về cơ bản, nó yêu cầu thêm một quy tắc trong /etc/udev/rules.d/ để bảo udev không xử lý các thiết bị cụ thể - mỗi thiết bị sẽ có dòng riêng xác định: KERNEL ==, sda1 ″, ENV {UDISKS_PRESENTATION_HIDE} = ″. Làm như vậy không sửa đổi bất kỳ hành vi hệ thống hoặc hạt nhân. Nó chỉ bảo UDEV ẩn phần trình bày của đĩa. Nautilus dựa vào xử lý quy tắc udev cho chính xác hành vi này.
papashou

1

Hãy thử gói kịch bản của bạn:

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

Không được kiểm tra nguyên nhân Tôi vào ngày 10.04

CẬP NHẬT:

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

Cảm ơn lời đề nghị ... Tôi không muốn sửa đổi cài đặt vì tôi không chắc nó sẽ có hiệu lực ngay lập tức, nó yêu cầu mã khác nhau cho mỗi bản phát hành, nó không phù hợp và nếu tập lệnh bị hủy bỏ, nó sẽ rời khỏi người dùng ở trạng thái không mong muốn - tôi cũng không tin rằng nó là cần thiết. Những gì tôi đang theo là cơ chế mà nautilus được thông báo về việc gắn kết và làm thế nào để vượt qua nó. vd: udev? dbus? đó là một thứ
bcbc

+ Tôi không muốn sửa đổi cài đặt vì tôi không chắc nó sẽ có hiệu lực ngay lập tức - Đó là câu hỏi cần kiểm tra (đủ dễ). + nó yêu cầu mã khác nhau cho mỗi bản phát hành - nó có thể yêu cầu hoặc không thể 50 | 50 như thể tôi có thể gặp một dyno ở ngoài đường)) + nó không phù hợp - so với phương án nào?
zuba

+ nếu tập lệnh bị hủy bỏ, nó sẽ khiến người dùng ở trạng thái không mong muốn - nhiều gói (ví dụ: aptitude) khi bị hủy bỏ làm như vậy. Có những cách tiếp cận để tránh tác dụng phụ đó. Ví dụ: bạn có thể sạc cron để kiểm tra cứ sau 1 phút nếu tập lệnh đang chạy và nếu không thay đổi cài đặt trở lại. Hoặc bạn có thể chạy tập lệnh của bạn từ tập lệnh khác điều khiển cài đặt.
zuba

Quan điểm của tôi là không nên thay đổi cài đặt cụ thể trên máy tính để bàn. Tôi cũng nên nói thêm rằng tập lệnh này có thể chạy trên ubfox / xubfox / kubfox / mỡ Ubuntu, vì vậy nó có mức độ phức tạp và rủi ro cao.
bcbc

Việc thay thế danh sách đen phân vùng bằng udisk (xem liên kết papashous) yêu cầu sudo và không thể di động trên các máy, do đó sẽ còn phức tạp và rủi ro hơn.
Egil

1

Bạn có thể ngăn chặn tự động ổ đĩa flash bằng cách thêm quy tắc udev mới. Trong quy tắc đó, bạn có thể chỉ định một ổ đĩa flash theo nhà cung cấp, số sê-ri, các thuộc tính khác của nó. Xem các dòng ATTRS {} trong đầu ra của:

udevadm info -a --name=sdb1

Tập lệnh đó bạn nên đặt vào thư mục /etc/udev/rules.d với tên tệp đặc biệt, ví dụ 81-usb-wubi-move.rules

Các quy tắc có thể trông giống như

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

Xem thêm:


Điều này có vẻ như là một giải pháp tiềm năng - tôi cần thời gian để xem xét điều này và thử nghiệm, và sẽ không có cơ hội cho đến ngày hôm nay (sẽ đưa ra phản hồi sau đó). Lý tưởng nhất là câu trả lời sẽ giải thích tại sao điều này xảy ra (so với việc chạy mounttừ thiết bị đầu cuối) nhưng nếu tôi có một cách giải quyết tốt tôi cũng sẽ chấp nhận điều đó.
bcbc

Đây là một
RobotHumans

0

Chưa được kiểm tra .... chỉ là một linh cảm.

Gắn kết hệ thống tệp trong cây không thể truy cập được đối với người dùng nautilus, ví dụ: trong thư mục con của / root hoặc / home / someoneelse hoặc thư mục con / tmp do người khác sở hữu và bảo mật

Hãy nhớ rằng có thể là một ý tưởng tồi khi gắn cùng một thiết bị phần cứng ở hai điểm gắn kết và sửa đổi nó từ cả hai.

Một số cấu hình con người có thể có trong (12.04beta) Ubuntu-> Cài đặt hệ thống-> Chi tiết-> Phương tiện di động. Một số tùy chọn có thể được đặt thành "không làm gì" và điều đó có thể tránh cửa sổ bật lên.

Tài liệu tại https://help.ubfox.com/community/Mount/USB có thể hữu ích cho 9,10 nhưng không hoạt động với 12.04. Các khóa cho trình soạn thảo gconf mà họ đề cập không còn được sử dụng.


Nó được gắn trong một thư mục dưới / tmp (và không ở đâu khác).
bcbc

Nhưng người dùng đã đăng nhập vẫn có thể truy cập / tmp. Đề xuất là sử dụng một thư mục mà người dùng đã đăng nhập không thể truy cập.
Paul

Tôi đã sử dụng chmod 700trên thư mục ... có vẻ đầy hứa hẹn và sau đó bật lên một cửa sổ thông báo (không có tiêu đề cửa sổ): "Không thể mở thư mục cho Hệ thống tập tin 10 GB", "Không có ứng dụng nào được đăng ký là xử lý tệp này"
bcbc

Hấp dẫn. Nó chắc chắn cố gắng. Có lẽ tôi sẽ có thời gian để chơi với điều này sau.
Paul

0

Hãy thử mountvới -n-icờ.


Tôi đã thử điều đó - gần như đã trải qua tất cả các tùy chọn gắn kết mà tôi có thể. Việc kích hoạt đang xảy ra ở nơi khác.
bcbc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.