আমি যখন চার্জারটি প্লাগ / আনপ্লাগ করি তখন আমি কীভাবে নোটিফাই-ওএসডি ব্যবহার করে অন-স্ক্রিন বিজ্ঞপ্তি পেতে পারি?
আমি যখন চার্জারটি প্লাগ / আনপ্লাগ করি তখন আমি কীভাবে নোটিফাই-ওএসডি ব্যবহার করে অন-স্ক্রিন বিজ্ঞপ্তি পেতে পারি?
উত্তর:
এসি শক্তি এবং ব্যাটারি পাওয়ারের মধ্যে স্যুইচিংয়ের ফলে ডি-বাস সিস্টেম বাসে একটি ইভেন্ট তৈরি করা উচিত । dbus-monitor --system
আপনার সিস্টেমে কী ইভেন্ট উত্পন্ন হয় তা চালান এবং দেখুন।
আপনার যদি আপওয়ার চলমান থাকে তবে আপনি এ থেকে আরও বিশেষ বিজ্ঞপ্তি পাবেন upower -m
।
#!/bin/sh
upower -m |
while read -r _time _2 _3 device; do
[ "$device" = "/org/freedesktop/UPower/devices/line_power_AC" ] || continue
notify-send "$(acpi -a)"
done
আপনি ইভেন্টগুলি থেকে পেতে পারেন acpi_listen
।
#!/bin/sh
acpi_listen |
while read -r what junk; do
[ "$what" = "ac_adapter" ] || continue
notify-send "$(acpi -a)"
done
আপনি বিজ্ঞপ্তি দেখা শুরু করতে চান বা এটি আপনার সেশন প্রারম্ভের সাথে যুক্ত করতে চাইলে এই স্ক্রিপ্টটি চালান।
কিছু লোক আমার পূর্বের ইউদেব দ্রবণটি বিদ্যুতের তারটি সংযুক্ত করার সময় বিজ্ঞপ্তিটি অনেক বার প্রেরণ করেছিল that আমি এটি পুনরুত্পাদন করতে পারিনি তবে আমি এই অজগর স্ক্রিপ্টটি ইউদেবের পরিবর্তে ডিবিস ব্যবহার করতে লিখেছিলাম। এটি .py
আপনার হার্ড ড্রাইভে কোথাও ফাইল হিসাবে সংরক্ষণ করুন । চালিয়ে ফাইল এক্সিকিউটেবল হিসাবে চিহ্নিত করুন:
sudo chmod +x yourFile.py
এবং এখানে বর্ণিত হিসাবে এটি আপনার স্টার্টআপ অ্যাপ্লিকেশনগুলিতে যুক্ত করুন । এই স্ক্রিপ্টটির জন্য প্যাকেজ acpi
ইনস্টল করা প্রয়োজন।
#!/usr/bin/python
import dbus
from dbus.mainloop.glib import DBusGMainLoop
import gobject
import subprocess
dbus_loop = DBusGMainLoop()
bus = dbus.SystemBus(mainloop=dbus_loop)
onMessage="Power plugged in!"
offMessage="Power unplugged!"
onImage="/usr/share/icons/gnome/32x32/devices/ac-adapter.png"
offImage="/usr/share/icons/gnome/32x32/status/battery-full.png"
def callback():
state = subprocess.check_output(["acpi", "-a"]).split(':')[1].strip()
if state == "on-line":
subprocess.call(["notify-send", "-i", onImage, onMessage])
elif state == "off-line":
subprocess.call(["notify-send", "-i", offImage, offMessage])
bus.add_signal_receiver(callback, 'Changed', 'org.freedesktop.UPower.Device', 'org.freedesktop.UPower', '/org/freedesktop/UPower/devices/line_power_AC')
loop = gobject.MainLoop()
loop.run()
সামান্য পরীক্ষা-নিরীক্ষা (এবং একটি সামান্য সহায়তা) দিয়ে আমি এটি সম্পাদন করার জন্য একটি উদেব নিয়মকে কাজে লাগাতে সক্ষম হয়েছি । কিছু লোক রিপোর্ট করেছেন যে এটি কখনও কখনও বিজ্ঞপ্তি একাধিকবার প্রেরণ করে তবে আমার কোনও সমস্যা হয়নি। YMMV।
নিম্নলিখিত বিষয়বস্তু সহ একটি স্ক্রিপ্ট তৈরি করুন:
#!/bin/bash
# Set this to your username
USER="some_user"
if [ "$POWER" == "on" ]
then
DISPLAY=:0 /bin/su $USER -c '/usr/bin/notify-send -i /usr/share/icons/gnome/32x32/devices/ac-adapter.png "Power cable plugged in."'
elif [ "$POWER" == "off" ]
then
DISPLAY=:0 /bin/su $USER -c '/usr/bin/notify-send -i /usr/share/icons/gnome/32x32/status/battery-full.png "Power cable unplugged."'
fi
some_user
আপনার ব্যবহারকারীর নাম দিয়ে প্রতিস্থাপন । চালিয়ে ফাইল এক্সিকিউটেবল হিসাবে চিহ্নিত করুন:
sudo chmod +x /path/to/script.sh
/path/to/script.sh
যেখানে আপনি স্ক্রিপ্টটি সংরক্ষণ করেছেন সেই পথের পরিবর্তে ।
এরপরে বিষয়বস্তুগুলির /etc/udev/rules.d
নামে একটি ফাইল তৈরি করুন 10-power.rules
:
SUBSYSTEM=="power_supply", ACTION=="change", ENV{POWER_SUPPLY_ONLINE}=="0", OPTIONS+="last_rule", RUN+="/path/to/script.sh" ENV{POWER}="off"
SUBSYSTEM=="power_supply", ACTION=="change", ENV{POWER_SUPPLY_ONLINE}=="1", OPTIONS+="last_rule", RUN+="/path/to/script.sh" ENV{POWER}="on"
আবার /path/to/script.sh
আপনি আগে তৈরি স্ক্রিপ্টের পথ দিয়ে প্রতিস্থাপন করছেন।
এখন চালিয়ে udev নিয়ম পুনরায় লোড করুন:
sudo udevadm control --reload-rules
পাওয়ার ক্যাবল আনপ্লাগ করুন। আপনার একটি বিজ্ঞপ্তি পাওয়া উচিত।
XAUTHORITY
করতে হবে ।
dbus-monitor
। আমার উত্তর দেখুন।
স্ক্রিপ্ট উত্স
#!/usr/bin/env bash
#
###########################################################
# Author: Serg Kolo , contact: 1047481448@qq.com
# Date: March 11, 2016
# Purpose: Script to detect connection/disconnection
# of the ac adapter
#
#
# Written for: http://askubuntu.com/q/542986/295286
# Tested on: Ubuntu 14.04 LTS
# Version: 0.2
###########################################################
# Copyright: Serg Kolo , 2016
#
# Permission to use, copy, modify, and distribute this software is hereby granted
# without fee, provided that the copyright notice above and this permission statement
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
#set -x
ARGV0="$0"
ARGC=$#
test_presence()
{
on_ac_power
echo $?
}
notify_change()
{
pgrep -f '/usr/bin/X' > /dev/null && GUI=true
connected='AC adapter connected'
disconnected='AC adapter disconnected'
if [ $1 -eq 0 ]
then
wall <<< $connected
$GUI && DISPLAY=:0 notify-send 'AC adapter connected'
else
wall <<< $connected
$GUI && DISPLAY=:0 notify-send 'AC adapter disconnected'
fi
}
main()
{
FLAG=$(test_presence)
while true
do
STATUS=$(test_presence)
if [ $STATUS -eq $FLAG ]
then
continue
else
notify_change $STATUS
FLAG=$STATUS
fi
sleep 3 #0.25
done
}
main
স্ক্রিপ্ট পাচ্ছি
স্ক্রিপ্টটি আমার গিথুবেও যুক্ত হয়েছে ; এই সংস্করণটি আপডেট হবে এবং আরও কিছুটা আরও উন্নত হবে।
আপনি নিম্নলিখিতটি দ্বারা এটি পেতে পারেন:
sugo apt-get install git
cd /opt
git clone https://github.com/SergKolo/sergrep.git
স্ক্রিপ্টটি /opt/sergrep
ডিরেক্টরিতে থাকবে, নামকরণ করা হবেnotify_ac_change.sh
ডিজাইনের ধারণা
মূল প্রশ্নগুলি হ'ল "আমরা কীভাবে এসি অ্যাডাপ্টারের উপস্থিতি পরীক্ষা করব?" এবং "আমরা কীভাবে পরিবর্তনগুলি সনাক্ত করব?"
ঠিক আছে, অন্যান্য বিকাশকারীগণ এই সমস্যাটি অনেক আগেই সমাধান করেছেন। উবুন্টু অন_এক_পাওয়ার নামে একটি স্ক্রিপ্ট নিয়ে ডিফল্টরূপে আসে যা এতে সঞ্চিত থাকে /usr/bin/on_ac_power
। কার্নেলের (এসিপিআই বা এপিএম) বিভিন্ন সাবসিস্টেমের আওতায় পাওয়ার অ্যাডাপ্টারের উল্লেখ করা যেতে পারে, তবে এই স্ক্রিপ্টটি আমাদের কাজকে আরও সহজ করে তোলে - লেখকরা সম্ভাব্য বিভিন্ন প্রচ্ছদকে কভার করেছেন। এটি কেবল প্রস্থান স্থিতি ফিরে আসে তাই এটি if
বিবৃতিতে ব্যবহারের জন্য উপযুক্ত ।
কেন on_ac_power
ভাল পছন্দ? কারণ এটি একাধিক সাবসিস্টেম চেক করার উপর নির্ভর করে। এটি কাজ করার জন্য সহজ পর্যাপ্ত কমান্ডও সরবরাহ করে - ফলাফলটি সত্য বা মিথ্যা।
সুতরাং আমরা উপস্থিতি সনাক্তকরণ সরঞ্জাম আছে, কিন্তু যুক্তি সম্পর্কে কি? আমাদের উপস্থিতি পোলিং করা উচিত এবং রাজ্যের পরিবর্তনগুলি সনাক্ত করতে হবে। আমরা যা করতে পারি তা হ'ল প্রস্থান স্থিতি সংরক্ষণ করা on_ac_power
এবং ক্রমাগত বর্তমান অবস্থার সাথে আমরা যা সংরক্ষণ করেছি তার সাথে তুলনা করা, এটি একবার পরিবর্তিত হয় - বিজ্ঞপ্তি পাঠান, আবার স্থিতিটি সংরক্ষণ করুন এবং লুপিংটি আবার তুলনা চালিয়ে যান। মূল ধারণাটি হ'ল পতাকা ব্যবহার।
সংক্ষেপে, আমরা রাষ্ট্রের একটি স্ন্যাপশট শুরু করি এবং তারপরে স্ন্যাপশট থেকে পরিবর্তনের জন্য ক্রমাগত জরিপ করি; একবার পরিবর্তন ঘটে - স্ন্যাপশটটি জানান এবং পুনরায় সেট করুন।