AppleScript para montar e desmontar unidades

0

este é o meu primeiro post neste site, por isso, desculpe-me se este for um post duplo, mas não consegui encontrar nada semelhante.

Eu estou no Macbook Pro 13 no início de 2011, instalei um ssd e movi o hdd para o optibay, fiz uma instalação limpa do Yosemite, meu segundo hdd é um 1TB onde eu armazeno meu trabalho e dados antes de fazer um backup quando estou em casa.

Eu não preciso que o hdd seja montado o tempo todo e eu preciso economizar energia e mantê-lo escondido, então eu o removi da pesquisa do holofote, fiz "sudo pmset -a disksleep 1" e criei dois applescript, um para ser lançado no login para desmontar diretamente o disco rígido eo segundo é lançado através da chave de ejeção que eu modifiquei com o karabiner (anteriormente conhecido como KeyRemap4MacBook)

O segundo script lança uma caixa de diálogo que pede uma senha e pergunta se eu gostaria de acessar o disco rígido, se sim, o disco rígido será montado, se não, ele será desmontado

O problema é que eu notei que se eu desligasse meu macbook enquanto o disco rígido estava montado, o identificador de disco mudava para as alterações do disco rígido do disco2 para o disco1 e ambos os scripts tentariam desmontar o ssd, então eu preciso manualmente ejeta o disco rígido e reinicie para que tudo volte ao normal.

O que eu quero fazer é modificar o script que é iniciado pela chave de ejeção para fazer com que ele inicie uma primeira caixa de diálogo, exatamente como a caixa de diálogo de desligamento, removendo o botão de cancelamento e adicionando um botão chamado "Expansion" (que é o nome do disco rígido).

Eu sou um novato com o applescript, então aqui está o que eu quero fazer: Exemplo

Se Restart for pressionado, desmonte o disco rígido e reinicie o computador. Se a suspensão for pressionada, desmonte o disco rígido e durma Se o desligamento for pressionado, desmonte o disco rígido eo desligamento. Se Expansion for pressionado, inicie o script antigo

Aqui está o meu script antigo, o novo script deve vir um pouco antes

     set my_password to display dialog ¬
    "Allow access to Expansion" with title ¬
    "Expansion" with icon caution ¬
    default answer ¬
    "" buttons {"Cancel", "OK"} default button 2 ¬
    giving up after 295 ¬
    with hidden answer
if text returned of my_password is "password here" then

    set answer to the button returned of (display dialog "Allow access to Expansion?" with icon caution buttons {"Yes", "No"})

    if answer = "Yes" then
        do shell script "diskutil mountDisk disk2"
        tell application "Notifications Scripting"


            display notification "Expansion" subtitle "is now mounted" sound name "Blow"

        end tell
    else if answer = "No" then
        try

            do shell script "hdiutil eject disk2"

        on error

            tell application "System Events"
                set termOpen to count (processes whose name is "Terminal")
                set amOpen to count (processes whose name is "Activity Monitor")
            end tell


            tell application "Terminal"
                activate
                set newTab to do script "lsof /Volumes/'HFS HD'"
            end tell

            tell application "Activity Monitor"
                activate
            end tell

            delay 3

            set question to display dialog "Kill running?" buttons {"Yes", "No"} default button 2
            set answer to button returned of question

            if answer is equal to "Yes" then
                do shell script "lsof -P | grep '/Volumes/HFS HD'  | awk '{print $2}' | xargs kill -9"
                do shell script "hdiutil eject disk2"
            end if


            tell application "Activity Monitor"
                if amOpen is 0 then
                    quit
                end if
            end tell

            tell application "Terminal"
                if termOpen is 0 then
                    quit
                else
                    close (first window whose selected tab is newTab) saving no
                end if
            end tell



        end try
        tell application "Notifications Scripting"


            display notification "Expansion" subtitle "is now unmounted" sound name "Blow"

        end tell
    end if
else
    tell application "Notifications Scripting"


        display notification "A Goomba killed Mario!" subtitle "Next time, try jumping on it" sound name "Sosumi"

    end tell
    quit

end if

Obrigado pela sua ajuda e desculpe se o TLDR: p

    
por Ait Zmerli Mohamed 10.10.2015 / 20:04

1 resposta

2

Então, depois de 3 horas pesquisando e pesquisando, encontrei uma solução.

Montar e desmontar o disco rígido com "diskutil mountDisk disk2" e "hdiutil eject disk2" foi uma má idéia, porque descobri que o identificador de disco continua mudando aleatoriamente, não importa se o disco rígido foi desmontado ou não no último desligamento. então o script que eu estava tentando adicionar era inútil.

A solução que encontrei foi obviamente o UUID, no começo eu não consegui que funcionasse corretamente, mas depois de várias tentativas, tudo funciona bem.

Como: Inicie o Disk Utility, à esquerda você verá cada disco com suas partições Selecione a partição para a qual você deseja criar o script e clique em Informações no canto superior esquerdo, uma janela de informações aparecerá, certifique-se de que é a partição correta, na lista de informações, você encontrará (Identificador Único Universal: Bunch-of- letras e números aqui) Esse é o UUID

Meu roteiro final:

set answer to the button returned of (display dialog “Mount the second HDD?” with icon caution buttons {"Yes", "No"})

if answer = "Yes" then
    do shell script "diskutil mount *YOUR UUID WITHOUT THE ASTERISK* ”

else if answer = "No" then
    try

        do shell script "diskutil unmount *YOUR UUID WITHOUT THE ASTERISK*"

    end try
end if

O comando Try evita mostrar uma mensagem se o disco já estiver desmontado.

É isso, simples e preciso, espero que isso ajude no futuro

    
por 11.10.2015 / 00:10