Mac'te terminal komutlarına kullanıcıdan arayüz üzerinden bilgi ve parola girişi almak.

Terminal aracılığı ile işlerimizi kolaylaştıran programlar yazabiliriz. Bu programlar kullanıcı etkileşimine ihtiyac duyabilir.Örnegin, bir metin girişi, parola girişi gibi. Bu durumda kullanıcı terminal üzerinde kendisine soru yöneltilen yere ilgili bilgiyi girmelidir ama bu durum son kullanıcı için biraz kafa karıştırıcı ve zor olabilir. Kullanıcı ile etkileşime girdiğimiz noktada bir arayüz(gui) üzerinden bilgi girişi alsak ama komut dosyamız programladığımız işlerimizi yine otomatik yapsa güzel olur diye düşündüm. Kısa bir araştırma sonucunda osascript ile aşağıda fotoğraflarını paylaştığım ekranı elde edebildim.

Mac'te osascript ile kullanıcıdan input almak.

      user_input=$(osascript <<EOF
  set dialogTitle to "PencereBasligi"
  set titledialog to display dialog "Açıklama: " default answer "" with answer buttons {"İptal", "Tamam"} default button "Tamam" with title dialogTitle
  set buttonPressed to button returned of titledialog
  set dialogResult to text returned of titledialog
  if buttonPressed is "İptal" then
      error "Kullanıcı İptal etti."
  else
      dialogResult
  end if
EOF
)

Metin bilgi girişini bu ekrandan alabiliriz. user_input değişkenini değeri kontrol edilerek işlemlere devam edilebilir yada bir döngü içinde boş olup olmadığı kontrol edilerek kod hayatına devam ettirilebilir. 

Metin bilgi girişi için gayet kullanılabilir bir ekran ama burada peki ya parola? Bu ekranda kullanıcıdan parolasını isteyerek parolayı değişkende tutarak koda devam edebilirsiniz ama burada parola istediğimiz zaman parolayı yazarken textbox'ta gizli görünmeyecek yani ekranda gördüğünüz gibi son kullanıcnın yazdığı metin etrafındaki başka insanlar tarafından da görülebilir. Bu durum hoş bir deneyim değil. Bu yüzden kullanıcının parolasını girmek için yukarıdaki scriptte "hidden" parametresini eklememiz yeterli. scripti hemen yeniden yazıyorum

  password=$(osascript <<EOF
set dialogTitle to "Pencere Basligi"
set passwordDialog to display dialog "Parolanızı girin:" default answer "" with hidden answer buttons {"İptal", "Tamam"} default button "Tamam" with title dialogTitle
set buttonPressed to button returned of passwordDialog
set passwordResult to text returned of passwordDialog
if buttonPressed is "İptal" then
  error "Kullanıcı İptal etti."
else
  passwordResult
end if
EOF
)

 

 

Terminal komutlarımıza gui ile kullanıcıdan bilgi ve parola giriş sağladık. Umarım faydalı olur. 




Devamını Okumak İçin »

osascript ile dinamik buton oluşturmak

Aslında kodlardan çok birşey anlaşılır mı bilmiyorum ben kendi iş akışımdan hızlıca bahsedeyim.

Elektronik imza için gerekli uygulamaların yüklü olup olmadığını daha sonra Usb takılımı, kart takılımı kontrol ediyor ardından gösteriyor.  Bunları yazıyor işte açıklama diye değiştirdim oraları. Ardından yüklü olmayanlar için yükle butonu çıkarıyor. Örnegin Uygulama1 Yüklü değil ise Button1=Uygualama1 Yukle seklinde Button1 değişkeni boş olmadığı için osascriptte Button1 değişkenini verdiğinde eğer yüklü değilse yükle butonu çıkmış oluyor. Osascript genel anlamda en fazla 3 butona kadar izin veriyor olması bizi sınırlıyor aslında ama olsun, benim işimi gördü fazlasıyla umarım daha çok işe yarar.

Bu scriptte terminali kullanmayı öğrenmnek isteyen insanlar için çok fazla şeyin örneği var aslında kullanıcıdan osascript ile parola alma aldığın parolayı değişkende tutma ve yükleme işleminde kullanmak.

Curl ile internetten dosya indirmek. PKG yüklemek, değişken oluşturmak kullanmak.


myvar1="";
myvar2="";
myvar3="";
function checkAPP() {
  APP2=$(ls /Applications |grep "app")
  APPSIGN=$(ls /Applications |grep "app")

  if echo "$APP" | grep -q "app"; then
    app="Yüklü"
  else
    app="Yüklü Değil"
  fi

  if echo "$APPSIGN" | grep -q "app"; then
    APPSIGN="Yüklü"
  else
    APPSIGN="Yüklü Değil"
  fi

}
function createbutton(){
  if [[ $myvar = "Yüklü Değil" ]]; then
     Button1="myvar1 Yükle"
   else
     unset Button1
  fi
  if [[ $myvar2 = "Yüklü Değil" ]]; then
     Button2="myvar2 Yükle"
   else
     unset Button2
  fi
}
function APP2() {
  password=$(osascript <<EOF
  set dialogTitle to "Parola Girişi"
  set passwordDialog to display dialog "Yükleme İşlemi için Mac Cihazınızın Parolasını girin:" default answer "" with hidden answer buttons {"İptal", "Tamam"} default button "Tamam" with title dialogTitle
  set buttonPressed to button returned of passwordDialog
  set passwordResult to text returned of passwordDialog
  if buttonPressed is "İptal" then
      error "Kullanıcı İptal etti."
  else
      passwordResult
  end if
EOF
  )
  link="downloadlink.com/app1"
  appname="app1"
  app=$appname.pkg
  appdmg=$appname.dmg
  appdownpath=~/Downloads/$app

  # Parolayı bir değişkene atayarak sudo komutlarında kullan
  echo "$password" | sudo -S curl -S -# $link --output $appdownpath
  echo "$password" | sudo -S installer -pkg $appdownpath -target /
}
function APP() {
  password=$(osascript <<EOF
  set dialogTitle to "Parola Girişi"
  set passwordDialog to display dialog "Yükleme İşlemi için Mac Cihazınızın Parolasını girin:" default answer "" with hidden answer buttons {"İptal", "Tamam"} default button "Tamam" with title dialogTitle
  set buttonPressed to button returned of passwordDialog
  set passwordResult to text returned of passwordDialog
  if buttonPressed is "İptal" then
      error "Kullanıcı İptal etti."
  else
      passwordResult
  end if
EOF
  )
  link="downloadlink.com/app1"
  appname="app1"
  app=$appname.pkg
  appdmg=$appname.dmg
  appdownpath=~/Downloads/$app

  # Parolayı bir değişkene atayarak sudo komutlarında kullan
  echo "$password" | sudo -S curl -S -# $link --output $appdownpath
  echo "$password" | sudo -S installer -pkg $appdownpath -target /
}
while true; do
    createbutton
    secim=$(osascript -e 'tell application "System Events" to button returned of (display alert "Istanbul BT" message "Açıklama: '$myvar1'\Açıklama: '$myvar2'\Açıklama: '$myvar3'" without icon buttons {"'$Button2'","'$Button1'","Button3"})';)
    if [[ $secim = $Button1 ]]; then
        APP2
    elif [[ $secim = "Button3" ]]; then
      sec=$(osascript -e 'tell application "System Events" to button returned of (display alert "Istanbul BT" message "Açıklama....." without icon buttons {"Çık","Sirket","Kadro"})';)
      if [[ $sec = "1" ]]; then
        if [[ $myvar2 = "Yüklü" ]]; then
           open /Applications/appname
        fi;
        open link?
        break
      elif [[ $sec = "2" ]]; then
          if [[ $myvar2 = "Yüklü" ]]; then
            open /Applications/appname
          fi;
          open link?
          break
      elif [[ $sec = "Çık" ]]; then
          break
      fi
    elif [[ $secim = $Button2 ]]; then
        APP2
    fi
done

Devamını Okumak İçin »

BT süreçlerinde Apple Kestirmeler uygulaması.


Apple'ın sitesinde yazan tanımı buraya olduğu gibi aktarıyorum,

Kestirme, yalnızca bir dokunuşla veya Siri’ye sorarak uygulamalarınızla bir şeyler halletmenin hızlı yoludur.

Kestirmeler, çok çeşitli görevleri otomatikleştirebilir. Kestirmeler sayesinde Takviminizdeki bir sonraki etkinlik için yol tarifi alabilir, bir uygulamadaki metni başka bir uygulamaya taşıyabilir, harcama raporları oluşturabilir ve çok daha fazlasını yapabilirsiniz.

Apple aygıtlarınızı nasıl kullandığınıza (uygulama kullanımınız ve tarayıcı, e-posta ve mesajlaşma geçmişiniz) bağlı olarak, Siri hızlıca dokunup çalıştırabileceğiniz basit, yararlı kestirmeler önerir. Bir kestirme yarattıktan sonra Siri’yi etkinleştirip kestirmenin adını söyleyerek kestirmeyi çalıştırabilirsiniz. (https://support.apple.com/tr-tr/guide/shortcuts/apdf22b0444c/ios)

Diğer bir deyişle Kestirmeler, kullanıcılara iş akışlarını otomatikleştirme, zaman kazanma ve daha verimli hale getirme imkanı sunar. Kullanıcılar, günlük hayatta sık kullandıkları görevleri hızlı bir şekilde gerçekleştirmek için Kestirmeler'i kullanabilirler.

Bende bu Kestirmeler uygulaması ile BT süreçlerinde kullanılmak üzere bir kestirme tasarladım. Kurumsal ve sık kullanılan uygulamaların hızlıca yüklenmesini sağlamak ve (mfa, vpn, şifre, wifi, mail vb.) uygulama ve işlemlerde sorun çıkması durumunda kullanıcının bilgisayarından ya da telefonundan rahatça erişerek çözüm alabilmesi için bir platform oluşturdum.

Bu kestirme mac'te menü çubuğunda bulunacak şekilde tasarlandı. Cihazlara uygulama yükleme, linklere yönlendirme, Whatsapp apileri aracılığı ile mesaj gönderme, QR kod oluşturma gibi yetenekleri geçtiğimiz yıl ekleyerek kestirmeyi tamamladım. Burada eklenebilecek çok şey vardır elbette ama en önemli eksik, kestirmelerde versiyon kontrolü özelliğinin olmamasıydı. Peki neden bu versiyon kontrolüne ihtiyaç var, hemen açıklayayım; Ben kestirmeyi tasarladıktan sonra link üretip sizinle paylaştığımda siz bu linkte ki ilgili kestirmeyi indirip ve kullanmaya başlıyorsunuz daha sonra herhangi bir özellik eklediğim zaman bu özellik sizin kullandığınız kestirmeye yansımıyor. Yeniden link üretip sizinle paylaşırsam bendeki özelliklere sahip kestirmeyi indirerek bu özelliklere sahip olabilirsiniz. Kestirme ismi aynı olduğu için yeni linki indirmeye çalıştığınız da bu kestirme mevcut değiştirmek istiyor musunuz diye soracak değiştirmesine izin verirseniz aynı addaki kestirme yeni özellikleri kullanabileceksiniz.

 

İş yoğunluğum nedeniyle bu versiyon kontrolü işine yoğunlaşamamıştım bu yıl bu sürece yoğunlaşabilme fırsatı buldum ve versiyon kontrolü özelliği getirdim. Tam olarak şöyle çalışıyor. Kestirme kendi içinde bir değişkende versiyon numarası tutuyor. Daha sonra çalıştığında sizin belirlediğiniz bir web adreste bulunan json dosyasına ulaşıyor ilgili dosyayı okuyor. Versiyon özelliğindeki numara ile kendi içinde değişkende tuttuğu numarayı karşılaştırıyor. Eğer numaralar aynı değilse sizin karşınıza, kestirmeyi ilgili versiyona güncelleme ile alakalı bir menü çıkarıyor. Yandaki görselde gördüğünüz gibi Güncelleyebilirsiniz ya da güncellemeden devam edebilirsiniz.

Sonrası zaten kestirmelerin standart özelliklerini kendi iş sürecimize adapte ettim. İlgili menüleri aşağıda paylaşıyorum.

Devamını Okumak İçin »

Tum Programlar Bash Betiği


Ofiste BT operasyonlarında kullanmak için bash dilinde programladığım, sürekli ihtiyaç duyduğumuz program ve araçları barındıran küçük bir program.

Bağlı olunan ağı ve bağlantı durumunu gösterir.

Kendi içinde versiyon kontrolü yapabiliyor. Yine üst barda güncel olup olmadığını bildiriyor. Isterse menüden seçerek versiyonunu güncellenebilir.

Listede gördüğünüz programları kendi sitesinden yada kurumsal cloud'dan çekerek yüklüyor. 

Cep telefonundan airdrop gibi bir araçla son kullanıncını bilgisayarına göndererek hızlıca işlem yapabiliyoruz.

Tool dosyası olarak yapılandırdığım için çalıştırma izni almaya gerek kalmıyor. İki kez tıklayınca çalışıyor. 

Ekran tasarımı değiştirmeye kullanıcını deneyimini arttırmaya çalışırken tput ile yeni bir ekran tasarımı için çalıştım. Aşağıdaki gibi bir ekran tasarladım. Bu ekranda sağ sol yukarı aşağı hareket ederek istediğimiz programı seçerek yüklemeye devam edebiliyoruz.

 

 

 


Devamını Okumak İçin »

macOS'ta Dock'a terminal ile uygulama eklemek


 

app_path=/Applications/Safari.app

    defaults write com.apple.dock persistent-apps -array-add "<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>$app_path</string><key>_CFURLStringType</key><integer>0</integer></dict></dict></dict>"
    killall Dock

Açıklamak gerekirse;

  • defaults: macOS'ta sistem yapılandırma ayarlarını okumak ve değiştirmek için kullanılır.

  • write: defaults  bir yapılandırma ayarı yazılacağını belirtir.

  • com.apple.dock: Dock yapılandırma ayarlarının bulunduğu plist dosyasının adıdır.

  • persistent-apps: Dock'ta bulunan sürekli uygulamaları temsil eden bir dizi (array) içindeki ayarları değiştirmek için kullanılan bir anahtar (key)'dır.

  • -array-add: persistent-apps dizisine yeni bir öğe eklemek için kullanılan bir seçenektir.

  • "<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>$app_path</string><key>_CFURLStringType</key><integer>0</integer></dict></dict></dict>": Eklenecek yeni öğenin XML formatında bir temsilidir. Bu öğe, eklemek istediğiniz uygulamanın bilgilerini içerir. $app_path değişkenine Dock'a eklemek istediğiniz uygulamanın yolu yazılmalıdır. Biz örnekte /Applications/Safari.app diye yazdık.

Bu komutu çalıştırdığınızda, belirtilen uygulama bilgilerini içeren yeni bir öğe, Dock'ta bulunan sürekli uygulamaların listesine eklenir. Bu sayede, belirtilen uygulama Dock'a eklenmiş olur.

Son olarak, killall Dock komutu, Dock'u sonlandırır ve yeniden başlatarak yapılandırma değişikliklerinin uygulanmasını sağlar. Böylece, Dock, yeni eklenen uygulamayı gösterir.

 Ventura'da çalışıyor.

Devamını Okumak İçin »

Terminal üzerinden Zoom yükleme

 

 Herkesin ihtiyaç duyabildiği Zoom uygualmasını kendi sitesinden indirip kuran bir script yazalım:

  • curl -# "https://cdn.zoom.us/prod/5.12.8.12565/zoomusInstallerFull.pkg" --output ~/Downloads/Zoom.pkg;
  • "-#" parametresi progressbar göstermeye yarıyor, daha sonra ardından tırnak işaretleri içinde link var --output parametresi ile dosyanın ineceği yeri gösteriyor. "~" işareti kullanıcının kendi klasorunu ifade eder, yani username/Downloads klasorune Zoom.pkg olarak indiriyor.
  • sudo installer -pkg ~/Downloads/Zoom.pkg -target /;
  • pkg dosyasının kurulumu yukarıdaki komutla yapılıyor, sudo yönetici yetkisi, yükleyeceği dosyasının yolu ve ardından -target / parametrelerini giriyoruz
  • rm -rf "~/Downloads/Zoom.pkg"
  • indirdiriğimiz dosyayı yükledikten sonra silmek için rm -rf kullanıyorum ben ama rm -rf komutu bir çok tehlikelidir, kendi kullanıcımın altındaki dosyaları tek seferde silmişliğim var ama nasıl silmek dosyalar sanki hiç yok gibiydi :) diger kullanımlarına bakınız daha güvenli kullanım biçimleri var.
  • open /Applications/Zoom.app; 
  • Daha sonra dosyayı açıyoruz.

Eğer talep ederseniz osascript ile kullanıcıya bildirim gönderebilirsiniz. Ben yukarıdaki ekran fotoğrafında sendNotification'u  fonksiyon olarak yazdığım için böyle kullandım kafa karıştırmasın.
Devamını Okumak İçin »

Terminal aracılığı ile ftp'de dosya indirme işlemi

Mac cihazlarda bazı terminal işlemleri

FTP'den doysa indimek ve farklı bir isimle kaydetmek için:

  • username@user ~ % curl -u name:passwd -# ftp://ftp.example.com/Programlar/macPogramlari/uygulama.zip --output ~/Desktop/uygulamam.zip
  • indirdiğim doyayı Zip te çıkarıyorum.
  • username@user ~ % unzip ~/Desktop/uygulamam.zip -d /Applications
  • Zipten çıkardığım için indirdiğim zip dosyasını siliyorum
  • username@user ~ % rm -rf ~/Desktop/uygulamam.zip
  • Zipten çıkardığım app dosyasını açıyorum.
  • username@user ~ % open /Applications/"uygulamam.app"


Devamını Okumak İçin »