Почему это происходит
Windows не будет читать desktop.ini
если это не системный файл (похоже, только для чтения, но системный файл означает, что он может оставаться скрытым, даже если вы устанавливаете несистемные скрытые файлы как видимые).
Почему вы, похоже, не можете это исправить
На общем ресурсе Samba (реализация Unix протокола SMB/ сетевого ресурса), даже если вы, например, зайдете в свойства и установите "только для чтения", он будет игнорироваться и не будет установлен. Это связано с тем, что Samba по умолчанию не хранит эти разрешения - что, по-видимому, связано с (вероятно, незначительным) налогом на производительность, поскольку разрешения (AFAIK) устанавливаются и считываются в альтернативных потоках в виде текстовых данных (вероятно, не будет работать, если вы разделяя некоторые элементарные FS, такие как FAT).
Как это исправить
Сначала убедитесь, что Samba хранит разрешения в стиле DOS (например, "system"), добавив следующую строку в определение общего ресурса:
store dos attributes = yes
Может быть, вы можете добавить это в [Global]
, вместо этого я добавил его в определенный ресурс.
Кроме того, некоторые люди скажут вам отредактировать неправильный файл.
/usr/share/samba/smb.conf
<= ерунда
/etc/samba/smb.conf
<= правильный файл
Перезапустите Samba (sudo service samba restart
), а затем выполните быструю проверку, чтобы выяснить, можно ли с помощью проводника Windows сделать файл доступным только для чтения и, если он сохраняется.
Хорошо, теперь вы можете сделать desktop.ini
системным / скрытым файлом. Для этого перейдите в папку, где он находится с командной строкой, и используйте:
attrib +s +h desktop.ini
При желании также (если ваш значок является относительным и хранится в той же папке, что и моя).
attrib +s +h folder.ico
Наконец, вам нужно пометить саму папку как доступную только для чтения (не имеет смысла и звучит глупо, поэтому вы знаете, что это допустимо).
attrib +r .
Конечно, вы можете (должны) написать это. Используя MSysGit, я сделал это на своем NAS:
find . -type f -iname desktop.ini | while read -r i; do
echo "Processing \"$(basename "${i%/*}")\""
attrib +s +h "$i"
attrib +s +h "${i%/*}/folder.ico" # Optional, in case you have these.
attrib +r "${i%/*}"
done