システム管理者のサービスでのZenity

どういうわけか、ある会社はフリーソフトウェアに切り替えることにしました。 そして、すべてのコンピューターにLinuxをダウンロードし、海外のディスクでサーバーをセットアップし、ユーザーアカウントを作成しました。 そして、チーフはすべての従業員がトリッキーなパスワードを設定するように命じました。 そして、彼らは目の前のどんな種類の獣についての話を聞いたが、パスワードを変更する場所を知りません。 または、設定で見つけることができません。 そして、コンソールから彼らは真っ逆さまに走ります。 そして、彼らは「admin-admin、私がボタンを見つけるのを助けてください」という言葉で管理者に走り始めます。


多くのユーザー(特にITに直接関係しないユーザー)にとって、新しいオペレーティングシステムとソフトウェアへの移行が苦痛を伴うことはよくあります。 そして、これは主に習慣によるものです。 人々は自分のコンピューターにあるものを覚えており、すべてを再配置すると、彼らは迷子になります。 結果として、多くの単純な行動は、時間と神経の損失などの困難を引き起こす可能性があります。



アイデアが浮上しました:システムインターフェイスにまだ馴染みのない、すぐにユーザーの介入が必要なタスク(上記のbylinaのパスワードの置き換えなど)で、この問題を解決できるウィンドウが明示的に与えられるとしたらどうでしょうか。 簡単な解決策を探して、私はzenityに出会いました これは、ダイアログボックスを表示できる小さなユーティリティです。 GTK +を使用し、判明したように、ほとんどの一般的なLinuxディストリビューションに含まれています。 これに加えて、BASHスクリプトで直接使用することができます。これにより、スクリプトを「膝の上」ですばやく作成し、特定の時間にユーザーで実行することができます。 例を考えてみましょう:



function change_password() { local passwords=$(zenity --forms --title="Change your password" \ --text="Set new password (minimum length 8 characters)" \ --separator="," \ --add-password="Your password" \ --add-password="Repeate password") local password1=$( echo $passwords | awk -F ',' '{print $1}' ) local password2=$( echo $passwords | awk -F ',' '{print $2}' ) if [[ $password1 == $password2 ]]; then if [[ ${#password1} == 0 ]]; then zenity --warning --text "Please, select Your password" change_password return fi if [[ ${#password1} < 8 ]]; then zenity --warning --text "Your password too easy." change_password return fi local username=$(whoami) #     #    Ctrl+C - Ctrl+V      #echo "$username:$password1" | chpasswd local expire_time=$(chage -l $username | awk 'FNR==2{print $4}') local full_name=$(cat /etc/passwd | grep "^$username" \ | awk -F ':' '{print $5}' | awk -F ',' '{print $1}') zenity --info --text "$full_name, Your password has been changed. Your new password expires: $expire_time" else zenity --warning --text "Passwords does not match" change_password return fi } change_password
      
      





その結果、パスワードのフォームを含むウィンドウが表示されます。これは、 おそらくatユーティリティまたはユーザーの類似物を使用して 「表示」され、ユーザーは新しいパスワードを入力するだけでユーザーと管理者の時間を節約できます。 次のようになります(システムの標準ウィンドウ装飾を使用):



画像



Zenityはウィンドウを表示するだけでなく、ウィンドウ内のユーザーがしたことを標準出力に表示します。 私たちの場合、彼はフォームの2つのフィールドに入力しました。 このまさに結論を傍受する必要があります。 したがって、すべてのフィールドの値をダイアログボックスからセパレータを介して1行で取得できます。デフォルトのシンボルは「|」で、この例ではコンマに置き換えます。 特に結果をすぐに確認する場合は、パラメータ割り当ての善意がそれを表しています。



 passwords=$(zenity --forms --title="Change your password" \ --text="Set new password (minimum length 8 characters)" \ --separator="," \ --add-password="Your password" \ --add-password="Repeate password")
      
      





次に、受信したデータのみを処理する必要があります(パスワードの長さが8文字未満になっていることを確認します-これは一例です。絶対にしないでください!)。そして、結果をユーザーに通知します。 これを行うには、メッセージのあるウィンドウが非常に便利であることが判明しました。これはフォームよりも簡単に作成できます。



 zenity --warning --text "Your password too easy." --width=300
      
      





画像



結論として、別のメッセージの助けを借りてユーザーを安心させることができ、すでに名前で彼に連絡しています:



 username=$(whoami) expire_time=$(chage -l $username | awk 'FNR==2{print $4}') full_name=$(cat /etc/passwd | grep "^$username" \ | awk -F ':' '{print $5}' | awk -F ',' '{print $1}') zenity --info --width=400 --text "$full_name, Your password has been changed. Your new password expires: $expire_time"
      
      





画像



または、標準の通知を使用できます。



 zenity --notification --window-icon="info" \ --text="$full_name, Your password has been changed. Your new password expires: $expire_time"
      
      





画像



警告 ! zenityパッケージの古いバージョンには、通知ウィンドウを作成するプロセスを完了できないバグがあります。 これは、ゼロ以外のタイムアウトを追加することで解決されます。



 zenity --notification --window-icon="info" --text="..." --timeout=1
      
      





このようなウィンドウを使用するというアイデアは好意的に受け取られ、すぐにユーザーに自分のコンピューターの作業を5段階で評価するよう求めるようになりました。 これは一般的に非常に有用な演習です。これにより、満足している人々の増加率を追跡し、新しい環境の開発で最も困難な人を強調し、それに応じて困難を解消するための対策を講じることができます。 最も単純な形式では、次のようになりました。



 mark=$(zenity --scale \ --text "Rate your experience" \ --value=3 \ --min-value=1\ --max-value=5 \ --step=1) if [[ $? == 0 ]]; then zenity --notification --window-icon="info" --text="Thank You!" --timeout=1 fi
      
      





オプションの名前は直感的であり、説明は不要です。



画像



残念ながら、zenityはそのようなスケールをアスタリスクに置き換えることはできません(アスタリスクの方が直感的であるという意見があります)が、すぐにリストのある類似体が見つかりました。



 zenity --list --text="What do you think about your PC?" \ --radiolist --column "Pick" --column "Opinion" \ TRUE "All is good" \ FALSE "All is good, but..." \ FALSE "I don't know" \ FALSE "Too dificult to use it" \ FALSE "AAA \(O_O)/ AAA" \ --height=350
      
      





画像



cronを使用すると、1日に1回実行して結果を見ることができます。 収集されたデータをサーバーに転送する問題を解決するためにのみ残っています。 実験の一環として、各コンピューターに既にエージェントを備えた監視システムを接続し、ユーザー投票用のグラフを作成することをお勧めします。



この記事の例は明らかに最も関連性が低いという事実にもかかわらず、小さなスクリプトでグラフィカルインターフェイスを使用してユーザーと通信することについて誰かが興味深い考えに導かれることを願っています。 おそらく、これらはすべての従業員にとって重要なメッセージ(壁のチームの精神で、窓のみ)、昼休みの開始に関する通知、 または企業パーティーの会場に関する投票になるでしょう。 また、この種のタスクの既製のソフトウェアソリューションを知っている場合は、コメントでそれらを共有できます。また、「膝の上」のスクリプトは興味深い実験に過ぎず、後でさらに何かに発展する可能性があります。



結論として、私は再びzenityマニュアルへのリンクを引用しますhttps ://help.gnome.org/users/zenity/stable/



All Articles