![]() |
|
|
გამარჯობა, სტუმარო ( შესვლა | რეგისტრაცია )
![]() |
![]()
პოსტი
#1
|
|
![]() ფობოფობი ![]() ![]() ![]() ![]() ![]() ![]() ჯგუფი: გლობალ მოდერი პოსტები: 3.431 ნიკის ჩასმა ციტატაში ჩასმა მდებარეობა: საქართველო: თბილისი კომპი წევრი №: 26 ![]() |
გუშინ ჩამივარდა Eee PC-ს ერთი ეგზემპლარი ხელში (დიდი მადლობა განათლების სამინისტროს) და ორსაათიანი ურთიერთობის შემდეგ საკმაოდ კმაყოფილი დავრჩი (IMG:style_emoticons/default/smile.gif) მგონი პირველი სწორი გადაწყვეტილებაა ქართული განათლების კომპიუტერიზაციის სფეროში ..
მალე მოკლე განხილვასაც დავწერ (სრული განხილვა ასე 10 დღეში იქნება), იქამდე კი თქვენი აზრი მაინტერესებს ამ მოწყობილობაზე (IMG:style_emoticons/default/smile.gif) პოსტის უკანასკნელი ჩამსწორებელია domen: May 21 2008, 08:51 AM -------------------- უფალო, მომეცი ძალა, რომ შევცვალო ის, რისი შეცვლაც შემიძლია; მომეცი მოთმინება, რომ ავიტანო ის, რისი შეცვლაც არ შემიძლია; და მომეცი სიბრძნე, რომ გავარჩიო ერთი მეორისაგან.
Wir müssen wissen — wir werden wissen! "და ერთმა ისიც კი თქვა, შაშია რანაირად დაწერდა პიესას, ყელი გადამწვარი აქვს და ხმა კიდევ ჩახლეჩილი და პიესაში ხომ სულ ხმამაღალი ლაპარაკიაო. მოკლედ, ვიკამათეთ ბევრი... აზრთა გაცვლა-გამოცვლა იყო." ... მე ვიცნობდი ერთ ტეხასელ ბიჭს, ის მეთექვსმეტე სართულიდან გადმოხტა. მოფრინავდა და ყველა სართულზე იმეორებდა, ჯერჯერობით ყველაფერი შესანიშნავად მიდისო ... |
|
|
![]() |
![]()
პოსტი
#2
|
|
![]() ერთი უსაქმური მეცნიერი ![]() ![]() ![]() ![]() ![]() ![]() ჯგუფი: კომპინფოელი პოსტები: 3.477 ნიკის ჩასმა ციტატაში ჩასმა მდებარეობა: Socket LGA775 წევრი №: 3.255 ![]() |
XANDROS OS-ის fastinit-ი.
მოკლედ რაშია საქმე, ლინუქსი როგორც წესი იტვირტება მეთოდით system start V მაგრამ ეს არის ძალიან ნელი, ამიტომ ასუსმა შექმნა fastinit-ი, მაგრამ ცუდი რაცაა, ამ ოხერს არ აქვს კონფიგურების საშUალება, მთლიანი პროგა ერთი ბინარია. ნუ გავჩითე ამის source, აი: პროგრამული კოდი #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <sys/types.h> #include <sys/wait.h> #include <sys/stat.h> #include <fcntl.h> #include <dirent.h> #include <sys/mount.h> #include <utmp.h> #include <sys/select.h> #include <linux/reboot.h> #include <linux/fs.h> #include <stdio.h> #include <string.h> #define SIGNAL(sa, signal, func, flags) \ do { \ sa.sa_handler = func; \ sa.sa_flags = flags; \ sigemptyset(&sa.sa_mask); \ sigaction(signal, &sa, NULL); \ } while(0) static int shutdown_flag = 0; void sig(int sig) { } void sigchild() { int pid, st; while((pid = waitpid(-1, &st, WNOHANG)) != 0) { if (errno == ECHILD) break; } } int get_uptime(void) { FILE *pfd; char puptime[256]; int uptime = 0; if((pfd = fopen("/proc/uptime", "r")) != NULL) { fgets(puptime, 255, pfd); fclose(pfd); // round down to an integer.... sscanf(puptime, "%d", &uptime); } return uptime; } void shutdown(int sig) { int my_uptime; int count = 10; if (shutdown_flag) { shutdown_flag++; return; } shutdown_flag = 1; system("/usr/bin/touch /tmp/shutdown"); kill( -1, SIGTERM ); // disable transmitter on wireless - important on 2G (Bug 40716) system("/sbin/iwpriv ath0 radio 0 > /dev/null 2>&1"); system("/usr/bin/chvt 1; synclient TouchpadOff=1; clear; /bin/echo -e \"\\033[?25l\\033[30;40m\""); system("/bin/cp /boot/shutdown.fb /dev/fb/0"); //get ready to wait between 1 and 2 seconds here... my_uptime = get_uptime() + 2; // system("/bin/echo -e \"\\033[?25l\\033[30;40m\"; /bin/cp /boot/shutdown.fb /dev/fb/0"); // system("/usr/bin/chvt 1; /bin/echo -e \"\\033[?25l\" > /dev/tty1; /bin/cp /boot/shutdown.fb /dev/fb/0");; // system("/usr/sbin/chvt 1 && cp /root/shutdown800.fb /dev/fb/0");; // system("/bin/echo -e \"\\033[?25l\\033[30;40m\"; synclient TouchpadOff=1; cp /boot/shutdown.fb /dev/fb/0"); usleep(1000000); if ( (my_uptime > get_uptime()) && count-- ) { system("cp /boot/shutdown.fb /dev/fb/0"); usleep(1000000); } // save the user's ALSA settings system("/usr/sbin/alsactl store > /dev/null 2>&1"); system("/sbin/hwclock --systohc --localtime"); kill( -1, SIGKILL ); usleep(1000000); sync(); sync(); // remount root ro system("/bin/mount -n -o remount,ro /"); //system("/bin/sh"); system("/sbin/unionctl.static / --remove / > /dev/null 2>&1"); //system("/bin/sh"); if((SIGINT == sig) || (SIGUSR1 == sig)) { reboot(LINUX_REBOOT_CMD_RESTART); } else { int afn; if((afn = open("/proc/acpi/sleep", O_WRONLY )) >= 0) { write(afn,"5", 1); close(afn); } // system("/bin/echo 5 > /proc/acpi/sleep"); // reboot(LINUX_REBOOT_CMD_POWER_OFF); } } int main(int argc, char **argv) { struct sigaction sa; sigset_t sigmask; struct timespec tv; DIR *dirp; int i; chdir("/"); umask(022); //set up signals for(i = 1; i <= NSIG; i++) { SIGNAL(sa, i, SIG_IGN, SA_RESTART); } SIGNAL(sa, SIGINT, shutdown, 0); SIGNAL(sa, SIGPWR, shutdown, 0); SIGNAL(sa, SIGUSR1, shutdown, 0); SIGNAL(sa, SIGUSR2, shutdown, 0); SIGNAL(sa, SIGTERM, sig, 0); SIGNAL(sa, SIGKILL, sig, 0); SIGNAL(sa, SIGALRM, sig, 0); SIGNAL(sa, SIGHUP, sig, 0); SIGNAL(sa, SIGSTOP, sig, SA_RESTART); SIGNAL(sa, SIGCONT, sig, SA_RESTART); SIGNAL(sa, SIGCHLD, sigchild, SA_RESTART); // Block child signal, only receive them from pselect sigemptyset( &sigmask ); sigaddset( &sigmask, SIGCHLD ); sigprocmask( SIG_BLOCK, &sigmask, NULL ); reboot(LINUX_REBOOT_CMD_CAD_OFF); FILE *pfd; char pcmdline[256]; if((pfd = fopen("/proc/cmdline", "r")) != NULL) { fgets(pcmdline, 255, pfd); if(strstr(pcmdline,"quiet")) { close(0); close(1); close(2); } fclose(pfd); } setsid(); mount("proc", "/proc", "proc", 0, NULL); mount("sysfs", "/sys", "sysfs", 0, NULL); mount("devpts", "/dev/pts", "devpts", 0, "gid=5,mode=620"); mount("tmpfs", "/dev/shm", "tmpfs", 0, NULL); mount("tmpfs", "/tmp", "tmpfs", 0, "mode=1777,size=128m"); // We move the mount that was already moved in initramfs so that // the "/" point is correct. mount("/mnt", "/", NULL, MS_MOVE, NULL); //system("/bin/loadkeys -q /etc/console/boottime.kmap.gz"); // setting up the clock int fd; if((fd = open("/etc/adjtime", O_WRONLY|O_CREAT|O_TRUNC, 0644)) >= 0) { write(fd,"0.0 0 0.0\n",10); close(fd); } system("/sbin/hwclock --hctosys --localtime"); // clean ifstate, not needed as tmpfs is mounted there // system("/sbin/sysctl -p > /dev/null"); // probably not needed, who knows //this directory is now on /dev/shm system("mkdir -p /dev/shm/network"); system("mkdir -p /dev/shm/resolvconf/interface"); system("rm -f /var/run/*.pid"); if((dirp = opendir("/etc/resolvconf/run/interface")) != NULL) { struct dirent *de; char file[1024]; while((de = readdir(dirp))!=NULL) { if(!isalnum(de->d_name[0])) { sprintf(file,"/etc/resolvconf/run/interface/%s",de->d_name); unlink(file); } } closedir(dirp); } (void) close(open(UTMP_FILE, O_WRONLY|O_CREAT|O_TRUNC, 0644)); (void) close(open("/etc/resolvconf/run/enable-updates", O_WRONLY|O_CREAT|O_TRUNC, 0644)); chdir("/etc/resolvconf/run/interface"); system("/bin/run-parts --arg=-i /etc/resolvconf/update.d"); chdir("/"); //system("/etc/ppp/ip-down.d/0dns-down 0dns-clean > /dev/null");, useless (void) close(open("/etc/network/run/ifstate", O_WRONLY|O_CREAT|O_TRUNC, 0644)); FILE *hnf; char hostname[1024]; if((hnf = fopen("/etc/hostname", "r")) != NULL) { fgets(hostname, 1023, hnf); char *c = strchr(hostname,'\n'); if(c!=NULL)*c='\0'; sethostname(hostname, strlen(hostname)); fclose(hnf); } system("/sbin/ifconfig lo 127.0.0.1 netmask 255.0.0.0 up > /dev/null"); // urandom system("/bin/cat /var/lib/urandom/random-seed >/dev/urandom > /dev/null 2>&1"); unlink("/var/lib/urandom/random-seed"); umask(077); system("/bin/dd if=/dev/urandom of=/var/lib/urandom/random-seed \ bs=4096 count=1 >/dev/null 2>&1"); // clean /tmp directory system("/bin/rm -rf /tmp/* /tmp/.* 2>/dev/null"); unlink("/var/run/.clean"); unlink("/var/lock/.clean"); // setup X directories umask(000); mkdir("/tmp/.X11-unix", S_ISVTX|S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IWGRP|S_IXGRP|S_IROTH|S_IWOTH|S_IXOTH); mkdir("/tmp/.ICE-unix", S_ISVTX|S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IWGRP|S_IXGRP|S_IROTH|S_IWOTH|S_IXOTH); umask(022); // Fork and start autologin on child, services on main thread if (fork() == 0) { // Child // Hangup /dev/console. This resets the terminal. vhangup(); // Close std-all on /dev/console close (2); close (1); close (0); // Open tty1 if ((fd = open("/dev/tty1", O_RDWR, 0)) != 0) exit (1); // reset signals to default sigset_t nmask, omask; struct sigaction act; act.sa_flags = 0; sigemptyset( &act.sa_mask ); act.sa_handler = SIG_DFL; sigemptyset(&nmask); sigaddset(&nmask, SIGCHLD ); sigprocmask(SIG_UNBLOCK, &nmask, NULL); for(i=0; i < NSIG; i++) sigaction( i, &act, 0 ); // system("/usr/sbin/915resolution.static 3c 800 480 24 &> /dev/null"); // Move outputs to tty1 dup2(fd,0); dup2(fd,1); dup2(fd,2); (void) close(open("/tmp/nologin", O_WRONLY|O_CREAT|O_TRUNC, 0644)); while (stat("/tmp/shutdown", NULL) < 0) { system("su -c startx -l user &> /dev/null"); } exit(0); } system("/sbin/getty 38400 tty3 &"); // start extra services sleep(1); system("/usr/sbin/services.sh &> /dev/null &"); // catch pids and wait to shutdown/stop while(1) { sigemptyset( &sigmask ); pselect( 0, NULL, NULL, NULL, NULL, &sigmask); } return 0; } ეხლა რა მინდა მინდა რომ startx-ის მაგივრად გაიხსნას kdm (KDE Display Manager). ნუ იასნა ვცვლი system("su -c startx -l user &> /dev/null"); ამას ესე: system("kdm &> /dev/null"); (su-ს იმიტომ ვაძრობ რომ გაუშვა ROOT-ით), ვერაფერს ვიტყვი დავაკომპლირე, ჩავანაცვლე, KDM იშლება ჩემს თვალწინ, სისტემასაც ტვირთავს, მაგრამ რაშია პრობლემა, CPU load არის 100%. ექსპერიმენტისთვის ვქენი ესეთი რამე: დავაბრუნე ორიგინალი fastinit და startx-ში #!/bin/sh-ის ქვემოთ დავაწერე: sudo kdm exit 0 შედეგი იგივე CPU 100%, მაგრამ როგორც კი startx ჩავარედაქტირებდი, უკვე აქტიური სისტემდან და წავშლიდი exit 0-ს CPU აზრზე მოდიოდა. ნუ იასნა კოდიდან ამივთხარე exit(0); ეგრე მივაკოპლირე და შედეგი 0 (IMG:style_emoticons/default/sad.gif) აბა რამე შემოთავაზებები გაქვთ? -------------------- "ბრძნად მეტყუელებაჲ ვერცხლი არს წმინდაჲ, ხოლო დუმილი - ოქროჲ რჩეული", ვითარცა თქუა სოლომონ.
არამედ აწ მე ნაკლუვანებაჲ ჩემი არა მიფლობს დუმილად |
|
|
![]() ![]() |
მსუბუქი ვერსია | ახლა არის: 24th July 2025 - 09:46 AM |