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 udev
và 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