Desmonte um volume assim que for inserido se o nome for "XYZ"

3

Eu tenho um modem USB que é montado como diz XYZ (que contém o Dialer Software e o Readme) quando é inserido. Para se conectar usando, eu tenho que ejetar e depois conectá-lo usando o discador ppp.

Digamos que seja montado sob o nome / Volumes / XYZ

Eu quero fazer algo como se eu inserir um dispositivo USB e ele for montado sob o nome XYZ, eu quero que ele seja ejetado imediatamente.

Como faço isso?

    
por Abhijeet Rastogi 28.12.2010 / 15:38

2 respostas

4

Eu fiz algo parecido uma vez, em que sempre que uma unidade chamada de certa forma era montada, um script era disparado imediatamente para sincronizar o conteúdo de um conjunto de pastas para a unidade.

Para fazer algo semelhante aqui, o script precisaria se parecer com isso:

#!/bin/bash

if [ -d /Volumes/XYZ ];
    then
    echo “Ejecting XYZ!”;
    umount /Volumes/XYZ
    exit;
fi

Salve-o em algum lugar, seu diretório ~/bin/ se você tiver um, ou talvez ~/Library/Scripts/ , apenas lembre-se de onde.

A segunda parte do quebra-cabeça é o LaunchAgent que realmente manipulará o evento sempre que uma unidade for montada:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.superuser.226504.example</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Path/To/Script/unmount-modem.sh</string>
    </array>
    <key>QueueDirectories</key>
    <array/>
    <key>StartOnMount</key>
    <true/>
    <key>WatchPaths</key>
    <array/>
</dict>
</plist>

Isso precisa ser salvo como .plist (com nome semelhante à string usada no lugar de "com.superuser.226504.example") e salvo em ~/Library/LaunchAgents . Você pode carregá-lo a partir do terminal via launchctl load ~/Library/LaunchAgents/pathtoplist ou sair / voltar a entrar e ele deve ser carregado se tudo estiver configurado corretamente.

    
por 28.12.2010 / 16:10
1

Você pode usar o seguinte AppleScript:

on adding folder items to this_folder after receiving added_items
    set the item_count to the number of items in the added_items

    if the item_count is greater than 1 then
        display dialog "Multiple additions, I can't handle that!"
    else
        set the volume_name_raw to (item 1 of the items in the added_items as text)
        set AppleScript's text item delimiters to ":"
        set volume_name to text item 1 of volume_name_raw as text
        if volume_name is "Carbon Copy Cloner" then
            do shell script "hdiutil detach '/Volumes/" & volume_name & "'"
        end if
    end if
end adding folder items to

Com base na ação de pasta "novo alerta de item" da Apple

Altere o nome do volume que você deseja ejetar na seguinte linha:

if volume_name is "Carbon Copy Cloner" then

Para ativá-lo:

  1. Abra /Applications/Utilities/AppleScript Editor e cole o script acima.
  2. Salve-o como um script (por exemplo, eject.scpt ) em ~/Library/Scripts/Folder Action Scripts/ .
  3. Feche o editor AppleScript.
  4. Clique com o botão direito do mouse em qualquer pasta no Finder, selecione Serviços »Configuração das ações da pasta
  5. Ignorar a caixa de diálogo da planilha.
  6. Verifique Ativar ações de pasta
  7. Clique no botão + no canto inferior esquerdo e pressione Command-Shift-G na caixa de diálogo do arquivo resultante. Coloque o código%. Não selecione um item, apenas pressione OK .
  8. Selecione a entrada da lista /Volumes e clique no botão Volumes abaixo da lista do lado direito.
  9. Selecione + na caixa de diálogo da planilha e clique em Anexar
  10. Feche Configuração das ações de pasta .

Feito!

    
por 28.12.2010 / 16:37