রাস্পবেরিপি ডেবিয়ান হুইজি: সি প্রোগ্রাম থেকে এক্স অ্যাপ্লিকেশন চালান


0

আমি একটি প্রোগ্রাম লিখতে চেষ্টা করছি যা রাস্পবেরি পাইতে ওপেন সোর্স প্রোগ্রামগুলি ব্যবহার করে সি এর পাঠ্য এবং পিডিএফ নথি পড়তে সহায়তা করবে।

প্রোগ্রামটি সহজ, জটিল কিছু নয় .....

আমি আমার ল্যাপটপ থেকে এসএসএসের মাধ্যমে রাস্পবেরি পাইয়ের সাথে সংযোগ করছি ... এক্স ফরোয়ার্ডিং ঠিকঠাক কাজ করছে কারণ আমি কোনও সমস্যা ছাড়াই কমান্ড লাইন থেকে এক্স অ্যাপ্লিকেশনগুলি চালু করতে পারি।

আমি রাস্পবেরি পাইতে অ্যাপাচি 2 ব্যবহার করছি এবং আমি এই প্রোগ্রামটির জন্য একটি ইউজার ইন্টারফেস তৈরি করেছি যেখানে আপনি পাঠ্য আটকানো, পাঠ্য ফাইল বা পিডিএফ ফাইল আপলোড করতে পারেন।

পাঠ্যটি স্প্যাসিকে বক্তৃতাতে রূপান্তরিত করা হয়েছে যা আউটপুটটিকে একটি তরঙ্গ ফাইলে সংরক্ষণ করে।

এখন সমস্যাটি আমি ব্যবহার করছি:

system("xmms2 play file.wav &") সি কোডে ........ কেবল একটি সংক্ষিপ্ত বিবরণ

এটি সংকলিত হয় ..... যখন আমি ওয়েব পৃষ্ঠা থেকে এটি চেষ্টা করি তখন এটি ত্রুটিগুলি প্রদর্শন করে:

Gtk-WARNING **: cannot open display: localhost:10.0
cannot start xmms2d.....failed to start xmms2 server

এমনকি আমি অ্যাকুয়ালং নামে আরেকটি অডিও প্লেয়ার চেষ্টা করেছিলাম এবং এটি একবার কাজ করেছিল তবে পরের দিন যখন আমি কম্পিউটার পুনরায় চালু করি তখন এটি আর কাজ করে না।

আমি চারপাশে গুগল করেছি export DISPLAY=:0.0এবং ক্লায়েন্ট এবং হোস্টের কাছে নিশ্চিত হোস্টনাম তৈরি করা থেকে শুরু করে লোকালহোস্ট নয় তবে কোনও সাফল্য নেই

সুতরাং আমি মনে করি সম্ভবত সি প্রোগ্রামে আমি যুক্ত না করে এমন কিছু আছে, সম্ভবত একটি শিরোনাম ফাইল যুক্ত করা দরকার বা এর মতোই কিছু ..... Gtk + আমার রাস্পবেরিতে ইনস্টল করা আছে ....

অথবা হতে পারে আমার এটি সি প্রোগ্রাম হিসাবে না করা উচিত তবে বাশ বা পিএইচপি সবই করা উচিত ....

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

প্লিস কিছু পরামর্শ প্রয়োজন .... এখানে কোড

#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <wiringPi.h>   


char readcmd(void) //reading from text file /home/pi/cmdrdy.txt first character is read
{    //whenever text is received a 1 is written to this file, 2 for file received
    FILE *stream;
    int ch;
    if( (stream = fopen("/home/pi/txtrdy.txt", "r")) == NULL )
        return 0;
    ch = fgetc( stream );
    fclose( stream );
    return (ch-'0');
}


void  reset()
{
    FILE *ft;
    char ch;
    ft = fopen( "/home/pi/cmdrdy.txt", "w" );
    ch = '0';
    fprintf(ft, "%c", ch );
    fclose(ft);
}


void checktxt(){
    if(readcmd() == 1)
    {
        system("espeak -v en -f /home/pi/book.txt -w /home/pi/text.wav &");
        reset();  //to reset the text received flag to 0
        system("xmms2 play /home/pi/text.wav &");
    }

    if(readcmd2() == 2)
    {
        system("pdftotext -layout  /home/pi/upload/*.pdf  /home/pi/converted.txt &");
        delay(300);
        system("espeak -v en -f /home/pi/converted.txt -w /home/pi/book.wav &");
        delay(500);

        system("sudo rm /home/pi/converted.txt");
        system("sudo rm  /home/pi/upload/*.pdf");
        system("xmm2 play /home/pi/book.wav &");
    }
}

void main(){
    while(1){
        checktxt();
    }
}


1
আমি একটি উত্তর প্রস্তাব করেছি। আমি এটি জানতে আগ্রহী যে এটি সঠিক কিনা, আপনি কি খুব ভয়াবহভাবে আমাকে বলবেন যে এটি আপনার সমস্যার সমাধান করে কিনা?
মারিউস ম্যাটুটিয়া

যদি আপনার সমস্যার সমাধান করে এবং সমাধান করে দেয় তবে আপনার সম্পাদনার উত্তর হিসাবে রাখা উচিত ছিল। প্রশ্নটি এখন ঘোলাটে দেখায়।
কার্ল বি

না এটি বুট থেকে শুরু করার বিষয় নয়, এটি মূল পরিবেশের অধীনে চলার বিষয়। এমআইটি ম্যাজিক কুকি যা স্ক্রিনের নিয়ন্ত্রণের অনুমতি দেয় তা আপনার অন্তর্ভুক্ত, রুট করার জন্য নয়, সুতরাং XAUTHORITY শেল ভেরিয়েবল সেট করা নেই। সমাধানটি এখনও একইরকম, আপনাকে অবশ্যই সি প্রোগ্রামের মালিককে লোকালহোস্টে লেখার অনুমতি দিতে হবে: 10.0
মারিয়াসম্যাটুটিয়

দয়া করে আপনি কী জানেন যে আমি এটি সম্পর্কে কীভাবে যাচ্ছি, কোন ফাইলটি লোকালহোস্ট: 10.0 / dev / stdout বোঝায়? এটি /
প্রোচার

উত্তর:


4

আমি নিজেই এই সমস্যায় পড়িনি, তবে কেন এটি হচ্ছে তা নিয়ে আমি শিক্ষিত অনুমান গড়ে তোলার উদ্যোগ নিতে পারি: এর চেহারা থেকে, এটি প্রদর্শিত হবে যে জাaথ শিশু প্রক্রিয়ায় প্রসারিত হয় না। আসলে, আমি এর আউটপুটে XAUTHORITY সনাক্ত করতে অক্ষম ছিল

   export -p

একটি রাস্পবেরি চলমান রাস্পিয়ান উপর।

আশেপাশে গুগলিংয়ের মাধ্যমে আমি নিশ্চিতভাবে প্রতিষ্ঠিত করতে অক্ষম ছিলাম যে এটি অন্যান্য ওএসের ক্ষেত্রেও সত্য, তবে এটি চেষ্টা করা এবং এটি ঠিক করা এত সহজ যে, যাইহোক এটি চেষ্টা করার মতো is আমি আপনাকে একটি নির্বাহযোগ্য স্ক্রিপ্টের সাহায্যে কমান্ডটির বিকল্প হিসাবে পরামর্শ দিচ্ছি, একে / home / my_name / bin / my_script কল করুন, chmod 755অবশ্যই অবশ্যই সম্পাদনযোগ্য করে দেওয়া হয়েছে , যেখানে আপনি নিম্নলিখিত 3 টি লাইন কোডটি রেখেছেন :

   #!/bin/bash
   export XAUTHORITY=/home/my_name/.Xauthority
   xmms2 play file.wav &

যেহেতু systemকলটি প্রথমে কাঁটাচামচ করে, তারপরে কলার পরিবেশের ভেরিয়েবলগুলির সাথে শেলের একটি উদাহরণ শুরু হয়, আপনার প্রোগ্রামটি (এবং এটি প্রমাণ করে এটি জানে) আপনার প্রদর্শনটি রয়েছে 10.0তবে কমান্ডটি xmms2কার্যকর করা হয়েছে এমন সাব-শেলের মধ্যেই এটির অ্যাক্সেস অবশ্যই মঞ্জুর করা উচিত । এই পরিবর্তনটি আপনাকে এটির নিশ্চিত করে।


আইটি কাজ করে! পুরুষেরা এটি কাজ করে! আপনাকে অনেক ধন্যবাদ .... এখনই কোডটি একটু উন্নতি করতে চলেছে .....
ব্যবহারকারীর 280026

xmms2 কাজ করে না তাই আমি uqualung ব্যবহার করেছি
ব্যবহারকারীর 280026

তবে আমি এটি আবিষ্কার করেছি যে এটি কারণেই সি প্রোগ্রামটি সমস্ত কিছু পরিচালনা করে বুট শুরু হয়, এটি মূল সুযোগগুলি পায় এবং এর ফলে সমস্যা দেখা দেয় .... যখন এটির প্রয়োজন এমন একটি অ্যাপ্লিকেশন চালু করতে হবে
ইউজার 280026

@ ইউজার ২00০০২ বিটিডাব্লু, দুর্দান্ত গান, আমার বন্ধু অ্যাকালুং, আপনি অস্থির হয়ে দূরে সরে যাবেন না, আপনি দরিদ্র বৃদ্ধ তিনি জানেন যে এটি কেবল আমি ... জেথ্রো টুল
মারিয়াসম্যাটুটিয়

0

আমি উপরের কোডটি এখনই কিছুটা পরিবর্তন করেছি এবং এতে পরামর্শ যুক্ত করেছি

অন্তর্ভুক্ত করা

অন্তর্ভুক্ত করা

অন্তর্ভুক্ত করা

অন্তর্ভুক্ত করা

টাইপএফ এনাম {ওয়েট, টেক্সট, পিডিএফ, ডক} স্ট্যাটস; টাইপডেফ চার স্টেট; স্টেট কারেন্ট_স্টেট;

চর রিডিমিএমডি () // পাঠ্য ফাইল থেকে পড়া / home/pi/Cmdrdy.txt প্রথম অক্ষরটি পড়বে {ফাইল * স্ট্রিম; int ch; যদি ((স্ট্রিম = fopen ("/ হোম / পাই / সেন্টিমির্ডি। টেক্সট", "আর")) == NULL) 0 ফিরে আসে; ch = fgetc (স্ট্রিম); fclose (প্রবাহ); রিটার্ন (ch-'0 '); }

void  reset()

ILE ফাইল * ফুট; চর চি; ft = fopen ("/ home/pi/Cmdrdy.txt", "w"); ch = '0'; fprintf (ft, "% c", ch); fclose সাথে (ফুট); }

char convtts() {  //convert text to speech
system("espeak -v en -f /home/pi/book.txt -w /home/pi/text.wav &");
return (0);

}

char pdf2txt(){   //convert pdf to text
 system("pdftotext -layout  /usr/lib/cgi-bin/upload/*.pdf /home/pi/converted.txt");
return (0);

}

char pdftts(){ //convert converted text to speech
  system("espeak -v en -f /home/pi/converted.txt -w /home/pi/book.wav &");
return(0);

}

void state_machine(void){   //creating a state machine

switch(current_state){


case WAIT:


    if(readcmd() == 1)
    {
    reset();
current_state  =  TEXT;
    }

if(readcmd() == 2)
    {
 reset();
    current_state  =  PDF;
}
break;


case TEXT:

convtts();
while(convtts()==1);

system("/home/pi/bin/text_script");

current_state = WAIT;
break;


case PDF:

pdf2txt();
while(pdf2txt()==1);

pdftts();
while(pdftts()==1);
system("/home/pi/bin/book_script");
system("sudo rm /usr/lib/cgi-bin/upload/*.pdf");
current_state = WAIT;
break;

}}

void main(){

while(1){

state_machine();

}}

এবং এটি কবজ মত কাজ করে ...... একটি মিলিয়ন ধন্যবাদ

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