চার্জারটি sertedোকানো / সরানো হলে আমি কীভাবে বিজ্ঞপ্তি-ওএসডি ব্যবহার করে একটি বিজ্ঞপ্তি পেতে পারি?


9

আমি যখন চার্জারটি প্লাগ / আনপ্লাগ করি তখন আমি কীভাবে নোটিফাই-ওএসডি ব্যবহার করে অন-স্ক্রিন বিজ্ঞপ্তি পেতে পারি?


আমি এটি করার জন্য একটি স্ক্রিপ্ট তৈরি করতে পারতাম .. তবে এটি খুব মার্জিত সমাধান নয়।
শেঠ

@ শেঠ এ জাতীয় চিত্রনাট্য কেমন হবে? আপনি একটি উত্তর পোস্ট করতে পারেন? আপনি "চার্জার আনপ্লাগড" ইভেন্টটি কীভাবে সনাক্ত করবেন তাতে আমি বিশেষভাবে আগ্রহী ...
ল্যান্ড্রোনি

@ লন্ড্রোনি ওহ, বুঝতে পারলেন না যে আপনি ওপি ছিলেন না। আমি নীচে একটি উত্তর পোস্ট। এটি আমার পক্ষে ভাল কাজ করে তবে আমার কয়েকজনের বন্ধুর সমস্যা রয়েছে। যদি এটি আপনার পক্ষে কাজ করে না তবে আমাকে জানান। আমি কথা বলার সাথে সাথে আরও ভাল পথে কাজ করছি।
শেঠ

@ এটি দেখার জন্য অনেক ধন্যবাদ। এটি যেমন ঘটেছিল, আমার ব্যাটারিটি আমার উপর খুব দ্রুত মৃত্যুর সাথে মারা গিয়েছিল, সুতরাং আমার ক্যোয়ারী এখনই কিছুটা চালিয়ে গেছে। তবে ভবিষ্যতের জন্য আমি এই সমাধানটি মাথায় রাখব।
ল্যান্ড্রোনি

উত্তর:


6

এসি শক্তি এবং ব্যাটারি পাওয়ারের মধ্যে স্যুইচিংয়ের ফলে ডি-বাস সিস্টেম বাসে একটি ইভেন্ট তৈরি করা উচিত । 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

আপনি বিজ্ঞপ্তি দেখা শুরু করতে চান বা এটি আপনার সেশন প্রারম্ভের সাথে যুক্ত করতে চাইলে এই স্ক্রিপ্টটি চালান।


6

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন

dbus,

কিছু লোক আমার পূর্বের ইউদেব দ্রবণটি বিদ্যুতের তারটি সংযুক্ত করার সময় বিজ্ঞপ্তিটি অনেক বার প্রেরণ করেছিল 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()

udev দ্বারা

সামান্য পরীক্ষা-নিরীক্ষা (এবং একটি সামান্য সহায়তা) দিয়ে আমি এটি সম্পাদন করার জন্য একটি উদেব নিয়মকে কাজে লাগাতে সক্ষম হয়েছি । কিছু লোক রিপোর্ট করেছেন যে এটি কখনও কখনও বিজ্ঞপ্তি একাধিকবার প্রেরণ করে তবে আমার কোনও সমস্যা হয়নি। 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 করতে হবে ।
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

@ গিলস আইএমও "রুট প্রয়োজন" এবং হার্ড কোডড ব্যবহারকারী খুব নির্বোধ নিতপিকস, তবে সম্পূর্ণতার জন্য আমি পরে ক্রোন সমাধান যুক্ত করব যদি আপনি মনে করেন যে এটি গুরুত্বপূর্ণ। আমি সুন্দর এটি জিডিএম এর অধীনে কাজ করে তবে আমি ডাবল চেক করব।
শেঠ

1
আমি পাইথন-ডিবিস এবং উদেবের ডিবিএস মেসেজিং এপিআইয়ের দিকেও নজর দিচ্ছি সম্ভবত একটি ডেমেন তৈরি করতে যা এই উদেব নিয়মের মতোই কাজ করবে, তবে একমাত্র সমস্যাটি হ'ল এটি নিয়মিত চলমান এবং যে কোনওটিতে পুনরায় চালু করা দরকার ব্যর্থতা, এমন কিছু যা আমি বিশ্বাস করি এটি ইতিমধ্যে বরং শালীন সমাধানে আরও বেশি পরিমাণে জটিলতা যুক্ত করে। তবে এর থেকে আরও ভাল সমাধান যদি হয় তবে আমি তাদের শুনে খুশি হব।
জোশুমাক্স

সবাই উবুন্টুকে একক ব্যবহারকারী সিস্টেম হিসাবে চালায় না। ক্রোন এখানে দরকারী নয়। আমি জানি আপনার জিডিএম এর পুরানো সংস্করণ এক্স কুকি ফাইলের অবস্থান সন্ধানের অতিরিক্ত পদক্ষেপের দরকার ছিল, সাম্প্রতিক সংস্করণগুলি সম্পর্কে আমি জানি না তবে আমি মনে করি এটি পরিবর্তন হয়নি hasn't কেডিএম নিয়ে একই সমস্যা । @ জোশুম্যাক্স আপনি অন্যান্য উত্স থেকে তথ্য পেতে পারেন, এবং ডিবিএসের মাধ্যমেও আপনি এটি শেলটি দিয়ে করতে পারেন dbus-monitor। আমার উত্তর দেখুন।
গিলস 'এ-অশুভ হওয়া বন্ধ করুন'

2

স্ক্রিপ্ট উত্স

#!/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 

স্ক্রিপ্ট পাচ্ছি

স্ক্রিপ্টটি আমার গিথুবেও যুক্ত হয়েছে ; এই সংস্করণটি আপডেট হবে এবং আরও কিছুটা আরও উন্নত হবে।

আপনি নিম্নলিখিতটি দ্বারা এটি পেতে পারেন:

  1. sugo apt-get install git
  2. cd /opt

  3. 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এবং ক্রমাগত বর্তমান অবস্থার সাথে আমরা যা সংরক্ষণ করেছি তার সাথে তুলনা করা, এটি একবার পরিবর্তিত হয় - বিজ্ঞপ্তি পাঠান, আবার স্থিতিটি সংরক্ষণ করুন এবং লুপিংটি আবার তুলনা চালিয়ে যান। মূল ধারণাটি হ'ল পতাকা ব্যবহার।

সংক্ষেপে, আমরা রাষ্ট্রের একটি স্ন্যাপশট শুরু করি এবং তারপরে স্ন্যাপশট থেকে পরিবর্তনের জন্য ক্রমাগত জরিপ করি; একবার পরিবর্তন ঘটে - স্ন্যাপশটটি জানান এবং পুনরায় সেট করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.