分类: Linux

  • Fedora 安装 nVIDIA显卡

    由于我的电脑是NVIDIA的显卡,所以在这里我们只介绍NVIDIA的显卡驱动的安装方法
    首先我们要做一些准备工作,以便在装好显卡驱动后不会发生进不了桌面的杯具!
    1.
    阻止kernel加载nouveau模块

  • Fedora下安装谷歌浏览器Google Chrome

      以前找了好久,Fedora 下的支持一直不好,安装总是很麻烦,要取消检查依靠,虽然可以装,但是效率确实不如Ubuntu下的Fedora.现在又重新安装了Fedora,师傅的建议,说Ubuntu不适合做开发,更不是合作服务器,不然就和XP作服务器一样可笑。我换了Fedora,运行我的服务器程序,反复的刷新,服务器程序没有关掉,证明Ubuntu是垃圾。。

  • 我的WordPress开张了

      163的博客实在是不太好用, 在千辛万苦之下, 成功自己搭建一个LAMP(Linux Apache MySQL PHP), 这是传统地说法, 要我说应该是LAMPW, 因为我是用的是WordPress. 在报废了3个Linux系统之后, 第四个Fedora 14成功的将Apache MySQL PHP 都安装成功, 并且将WordPress给装好了, 只是这个机子(Fedora 14)的配置不怎么样(CPU: AMD 3200+,   内存: 512M, 硬盘:80G), 网络也不怎么样, 2MB的, 接了6台电脑, 不过暂时用着还是不错,, 这几天想办法把163的博客搬过来..

      记得我把AMP半个小时就在Windows下装好了, Linux咋这么麻烦呢? 技术要求高些啊~~我要学得还很多很多..

      经过几次的失败, 我也有了不少经验了, 哈哈, Linux的经验就是这么慢慢来的. 不过要说的话, 从编译的方式我还弄不好LAMP, 是直接使用的yum install, 编译真的很痛苦….

      不过真的可以休息一阵子了, NOIP复赛即将开始, 我要全力备战It.. By the way, 这WordPress还不太会用, 有空还是琢磨下.

  • Linux 内核中的巧妙 — 用宏定义函数

      在内核初始化的时候,调用的fork是一个用宏定义的函数,什么意思呢:
        static inline _syscall0(int,fork)
      这样就定义了一个函数int fork(void) ,至于
    _syscall0的代码,看下面:
    #define _syscall0(type,name) \
    type name(void) \
    { \
    long res; \
    asm volatile ("int $0x80" \
            : "=a" (
    res) \
            : "0" (_NR##name)); \
    if (res >= 0) \
            return (type)
    res; \
    errno = -__res; \
    return –1; \
    }

  • [转]mingw,cygwin,gnuwin32 的详细区别.

    • MinGW:Minimalist GNU for Windows
      • 安装MinGW
        • 无配置
      • 安装MSYS及MSYSDTK
        • 编辑了/MSYS.bat
          1. 加入chdir,使可以在目录外运行。
          2. 通过命令行参数%~dp0得到MSYS的路径。
          3. 删除其他命令行参数相关的动作。
          4. 将命令行参数%~dp1设置为环境变量MSYSINITDIR以备Shell初始目录之用。
          5. 将默认的Shell从rxvt改为sh。
        • 增加了/LoadMSYS.bat及/LoadMSYS.reg
          1. 作用:扩展命令行参数为完全路径名,将参数传送给MSYS.BAT。
          2. 将LoadMSYS.bat放在系统PATH下面,使在任何目录下都可以调用。
          3. 编辑注册表ROOT下面的*项和Folder项,以支持鼠标右健直接调用。
          4. 导出注册表项为LoadMSYS.reg,以备用。
        • 编辑了/etc/fstab
          1. 设置MinGW目录的Mount Point为/mingw
          2. 设置MINGW/INFO的Mount Point为/info
          3. 创建COMMAND目录,将Mount Point设为/usr/local/bin,以存放用MinGW Gcc编译的程序。
          4. 设置了其他一些常用目录的Mount Point。
        • 编辑了/etc/profile
          1. export PATH:加入/Mingw/bin。
          2. export INFOPATH:目录用;号隔开,作info搜索之用。
          3. 如果$MSYSINITDIR不为空,则改变为初始目录(CD之)。
        • 编辑了$HOME/.vimrc
          1. 配置复制自win32版的gvim。
          2. 加入syntax on:语法高亮。
          3. 加入set nu:显示行号。
          4. 加入set guifont:设置字体(console版本无效)
      • 总结
        • MinGW:许多unix源码,很难在不修改的情况下直接编译
        • MinGW:作为windows native programe(不依赖emulation layer),可以胜任
        • MSYS:对宽字符的支持较差
        • FREEWARE
    • Cygwin:GNU+Cygnus+Windows
      • 下载时只选择必需的程序包
      • 与MSYS近似的许多配置
      • 编辑了/etc/bash.bashrc
        • export PATH
        • export INFOPATH
          • 与MinGW不同,目录间用:号隔开
        • export MANPATH
      • 设置常用目录的Mount Point
        • Cygwin无/etc/fstab文件,Mount Point通过命令行mount命令设置,设置在下次重启之后仍有效。
      • 编译了新版本的Gcc及Gdb
      • 编译了新版本的make
      • 编译了termcap
      • 编译了less
      • 总结
        • 大多数unix源码都可以顺利编译
        • 对宽字符集支持较好
        • 编译的程序大多数依赖CygDLL
        • 非常丰富的程序库
        • FREEWARE
    • GnuWin32:Win32 ports of tools with a GNU or similar open source license
      • termcap
        • 在MSYS/MinGW环境下编译成功
      • less
        • 需要termcap
        • 在MSYS/MinGw环境下无法编译
          • 提示找不到langinfo.h
          • 下载了libgw32c的lib版,修改makefile,main.c,filename.c之后,编译成功,但运行时出现错误。 
        • 在Cygwin环境下编译成功
        • 用VC97编译成功
      • libgw32c
        • 在MSYS/MinGw环境下无法编译
          • 错误极多
        • 在Cygwin环境下无法编译
          • 错误极多
        • 连接bin版某些程序可以编译
          • 运行时出现错误
            1. 以编译less为例
      • wget
        • 用VC97编译成功
      • 总结
        • 源代码大多在MSYS/MinGW下无法成功编译
        • 源代码对Microsoft VC友好
        • 源代码对Cygwin/MinGW友好
        • 作为独立的工具程式较有价值
        • FREEWARE
    • 总结之总结
      • 这两三天,加上以前几天,仿佛很忙。./configure,make,make install,make clean,make distclean,info XXX,上网看文档,下载源代码。归结起来,没做什么有价值的事。就算积累了一些经验。经验不外是记忆,记忆不外是先进先出,然后完了。所以做了以上一点记号。哎,大脑内存不断磨损,还是复制到外存贮器上安全一点,算是备份。

  • Ubuntu WebQQ桌面化

    转自Ubuntu中文官方..
    桌面化webqq可实现将webqq最小化到通知区域并且来消息时提示

    1.安装google chrome浏览器

    2.安装alltray sudo apt-get install alltray

    3.新建一个启动器,名称随便,命令为 “/usr/bin/alltray” -t 5 -s /opt/google/chrome/google-chrome –app=”http://web.qq.com“

    4.若来消息不提示请参考会员wobu的文章 http://forum.ubuntu.org.cn/viewtopic.php?f=73&t=257749&start=0

  • Fedora 12 安装 unrar

    [root@Zqynux yylogo]# yum -y install unrar
    已加载插件:axelget, fastestmirror, refresh-packagekit
    Loading mirror speeds from cached hostfile
      fedora: mirrors.163.com
      updates: mirrors.163.com
    设置安装进程
    No package unrar available.
    无须任何处理
    warning: /var/tmp/rpm-tmp.OEJ6CN: Header V3 RSA/SHA256 signature: NOKEY, key ID 8fcff4da
    Preparing…                ########################################### [100%]
       1:rpmfusion-free-release ########################################### [100%
    warning: /var/tmp/rpm-tmp.m0szEk: Header V3 RSA/SHA256 signature: NOKEY, key ID 8dc43844
    Preparing…                ########################################### [100%]
       1:rpmfusion-nonfree-relea########################################### [100%]
    [root@Zqynux yum.repos.d]# yum install unrar -y
    已加载插件:axelget, fastestmirror, refresh-packagekit
    Loading mirror speeds from cached hostfile
      fedora: mirrors.163.com
      rpmfusion-free: mirrors.163.com
      rpmfusion-free-updates: mirrors.163.com
      rpmfusion-nonfree: mirrors.163.com
      rpmfusion-nonfree-updates: mirrors.163.com
      updates: mirrors.163.com
    设置安装进程
    解决依赖关系
    –> 执行事务检查
    —> 软件包 unrar.i686 0:3.8.5-5.fc12 将被 升级
    –> 完成依赖关系计算

    依赖关系解决

    ============================================================================
     软件包    架构     版本                仓库                           大小
    ============================================================================
    正在安装:
     unrar     i686     3.8.5-5.fc12        rpmfusion-nonfree-updates     105 k

    事务概要
    ============================================================================
    安装       1 软件包
    更新       0 软件包

    总文件大小:105 k
    下载软件包:
    [1/1]Ok,we will try to use axel to download this big file:107392
    Target already exists,skip to next file!
    warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 signature: NOKEY, key ID a3a882c1
    rpmfusion-nonfree-updates/gpgkey                     | 3.4 kB     00:00 … 
    导入 GPG 密钥 0xA3A882C1 "RPM Fusion nonfree repository for Fedora (12) <rpmfusion-buildsys@lists.rpmfusion.org>",来自 /etc/pki/rpm-gpg/RPM-GPG-KEY-rpmfusion-nonfree-fedora-12-i386
    运行 rpm_check_debug 
    执行事务测试
    完成事务测试
    事务测试成功
    执行事务
    警告:自上次 yum 事务以来 RPMDB 已变动。
      正在安装       : unrar-3.8.5-5.fc12.i686                              1/1 

    已安装:
      unrar.i686 0:3.8.5-5.fc12                                                 

    完毕!

  • Http 服务器整好了

      上午9点钟起来,吃了饭就在弄昨天找到的一个Http服务器,总共只有200行不到的代码,很快就看完了,也理解了,唯一要到网上查阅一下的就是HTTP协议,大致能看懂一点,但是我想多看看。
      整了2个多小时,到近11点的时候就Ok了,把服务器弄好了,可以简单的浏览本地Html文件了,但是问题还有很多,比如子进程没有处理,让它们僵死了;还有这个程序只是用了一次读数据,内网倒不会有问题,外网的话,就不一定了,所以最好还是用循环的好。
      还有一些问题就是看Unix网络编程了,Unix网络编程前面的内容就是围绕着一个简单的程序进行讲解socket的,各种各样的问题,技术。
      这份代码以后我会重写,然后加入更多的元素,让它能够使用。服务器代码如下:
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<unistd.h>
    #include<sys/socket.h>
    #include<netinet/in.h>
    #include<arpa/inet.h>
    #include<sys/stat.h>
    #include<fcntl.h>

    #define BACKLOG 3
    #define BUFSIZE 10244

    char not_found =
        "HTTP/1.1 404 Not Found\r\n" "Content-Type: text/html\r\n"
        "Content-Length: 40\r\n" "\r\n"
        "<HTML><BODY>File not found</BODY></HTML>";
    char bad_request =
        "HTTP/1.1 400 Bad Request\r\n" "Content-Type: text/html\r\n"
        "Content-Length: 39\r\n" "\r\n"
        "<h1>Bad Request (Invalid Hostname)</h1>";
    /
    char moved_permanently = 
         "HTTP/1.1 301 Moved Permanently\r\n"     "Content-Length: 147\r\n"        "Content-Type: text/html\r\n"       "Location: %s\r\n"          "\r\n"             "<head><title>Document Moved</title></head><body><h1>Object Moved</h1>This document may be found <a HREF="\" mce_HREF="\""%s\">here</a></body>"; 
    /
    char head_analysis(char p);
    void read_send(const char p, char pbuf, int connfd);

    int main(void)
    {
            int listenfd;
            struct sockaddr_in servAddr;
            unsigned port = 80;

            printf("HTTP Server is starting at port %d…\n", port);

            listenfd = socket(AF_INET, SOCK_STREAM, 0);
            if (listenfd == –1) {
                    printf("Invalid socket!\n");
                    return 1;
            }

            bzero(&servAddr, sizeof(servAddr));
            servAddr.sin_family = AF_INET;
            servAddr.sin_port = htons(port);
            servAddr.sin_addr.s_addr = htonl(INADDR_ANY);

            printf("Server is listening…\n");
            if (bind(listenfd, (struct sockaddr ) &servAddr,
                 sizeof(servAddr)) != 0) {
                    close(listenfd);
                    perror("Bind Error");
                    return 1;
            }
            printf("Binding server to port %d successfully.\n", port);

            if (listen(listenfd, BACKLOG) != 0)
            {
                    close(listenfd);
                    perror("Listen error");
                    return 1;
            }

            printf("Waiting client…\n");

            while (1) {
                    struct sockaddr_in cliAddr;
                    size_t cliAddrLen = sizeof(cliAddr);
                    pid_t pid;
                    char 
    p = NULL,
                        from[20],
                        file_name[100] = "/home/zqynux/network/",
                        rcvbuf[1024], sendbuf[BUFSIZE];

                    int connfd =
                        accept(listenfd, (struct sockaddr ) &cliAddr,
                               &cliAddrLen);
                    if (connfd < 0) {
                            close(listenfd);
                            printf("accept error\n");
                            return 1;
                    }

                    pid = fork();
                    if (pid == 0)
                    {
                            close(listenfd);
                            strcpy(from, inet_ntoa(cliAddr.sin_addr));
                            printf("\n\nclient %s CONNECTED.\n", from);

                            if (recv(connfd, rcvbuf, sizeof(rcvbuf), 0) > 0) {
                                    printf("%s\n", rcvbuf);
                                    p = head_analysis(rcvbuf);
                            } else {
                                    perror("Read Error");
                                    exit(0);
                            }
                            if (p != NULL) {
                                    strcat(file_name, p);
                                    printf("FILE NAME :%s\n", file_name);
                                    read_send(file_name, sendbuf, connfd);
                            } else{
                                    printf("No default html\n");
                                    send(connfd, bad_request,
                                         strlen(bad_request), 0);
                            }

                            close(connfd);
                            printf("DISCONNECTION TO CLIENT\n");
                            exit(0);
                    } else if (pid > 0)
                            close(connfd);
                    else
                            return 1;
            }

            close(listenfd);

            return 0;
    }

    char head_analysis(char p)
    {
            char 
    ptmp = p;

            if (strncmp(ptmp, "GET /", 5) == 0) {
                    ptmp += 5;
                    while (ptmp != ‘ ‘)
                            ptmp++;
                    
    ptmp++ = ‘\0’;

                    if (strncmp(ptmp, "HTTP/", 5) == 0)
                            return p + 5;
                    else
                            return NULL;
            }else
                    return NULL;
    }
    void read_send(const char p, char pbuf, int connfd)
    {
            int fd;
            size_t rdLen;
            fd = open(p, O_RDONLY);
            if (fd != –1) {
                    send(connfd,
                         "HTTP/1.1 200 OK\r\nContent-Type:text/html\r\n\r\n",
                         strlen
                         ("HTTP/1.1 200 OK\r\nContent-Type:text/html\r\n\r\n"),
                         0);

                    while ((rdLen = read(fd, pbuf, BUFSIZE)) > 0)
                            send(connfd, pbuf, rdLen, 0);

                    printf("WRITE TO CLIENT FINISHED\n");
                    close(fd);
            } else{
                    send(connfd, not_found, strlen(not_found), 0);
                    printf("FILE Not Find\n");
            }
    }
      至于客户端就是浏览器。

  • 解决Ubuntu Gedit的乱码

      因为家里有两台机子,一台Linux一台Windows,而Linux那台的硬件配置差的要死,还有一些原因,我有时也用Windows看下电子书,坐下笔记,Windows下面的的docx(Word 2007的格式)能在Linux下打开,但是纯txt不能在我的Ubuntu下打开是乱码(这里说一下,在Fedora 的KDE(不知道它的Gnome行不行)里面的gedit能够智能识别编码。),到网上搜了一下,找到了解决方法,如下:

    缺省配置下,用 Ubuntu 的文本编辑器(gedit)打开 GB18030/GBK/GB2312 等类型的中文编码文本文件时,将会出现乱码。

    出现这种情况的原因是,gedit 使用一个编码匹配列表,只有在这个列表中的编码才会进行匹配,不在这个列表中的编码将显示为乱码。您要做的就是将 GB18030 加入这个匹配列表。

    • 命令行方式,适用于所有 Ubuntu 用户。

    复制以下命令到终端中,然后回车即可:

    gconftool-2 –set –type=list –list-type=string /apps/gedit-2/preferences/encodings/auto_detected “[UTF-8,CURRENT,GB18030,BIG5-HKSCS,UTF-16]”

    • 图形化方式,适用于 Ubuntu 用户,而不适用于 KUbuntu/XUbuntu 用户。

    您可以遵循以下步骤,使您的 gedit 正确显示中文编码文件。

    1. 按下 Alt-F2,打开“运行应用程序”对话框。
    2. 在文本框中键入“gconf-editor”,并按下回车键,打开“配置编辑器”。
    3. 展开左边的树节点,找到 /apps/gedit-2/preferences/encodings 节点并单击它。
    4. 双击右边的 auto_detected 键,打开“编辑键”对话框。
    5. 单击列表右边的“添加”按钮,输入“GB18030”,单击确定按钮。
    6. 列表的最底部新增加了一个“GB18030”。单击选中它,并单击右边的 “向上” 按钮直到 “GB18030” 位于列表的顶部为止。
    7. 单击确定按钮,关闭配置编辑器。

    现在,您的 gedit 应该能够顺利打开 GB18030 编码的文本文件了。

  • Ubuntu 10.04 桌面特效的设置

      早就听说过Linux下的桌面特效不比Windows 7逊色~! 而且内存和CPU需求量更小,记得以前我装Fedora 12的时候,使用桌面特效说没有显卡,后来有一张显卡可以给我用一阵子,特效好过瘾,但是后来显卡一拿走机子就开不开机了,因为特效太卡了~!结果只能重装系统(我那机子很老很老,已经是古董了,不过有我深深的回忆~!)
      现在用了Ubuntu,我是好了伤疤忘了疼,又想开特效,在菜单里面找到了特效的设置,有三种选项:无,一般,绚丽的(可能词语不对,反正就是这个意思),我先用了普通的,没什么特别的,就是鼠标,窗口下面多了点阴影,用绚丽的只有一个特色,就是移动窗口的时候,窗口变成了橡皮泥,弹赖弹去,玩着过瘾,后来到网上找了下,有这么一个软件:
    compizconfig-settings-manager可以使用更多的特效,我下载下来玩了下,确实过瘾,下载方式:
      在终端中输入:
    sudo apt-get install compizconfig-settings-manager
      后来我记得以前我看别人的Linux出现过火焰,而这个里面没有这个选项,我就又找啊找,找到了另外一个包:
      
    sudo apt-get install compiz-fusion-plugins-extra
      里面有更多的特效,什么3D的,火焰,还有各种各样有意思的特效~!~!
      而且关键是我那台破机子玩这些特效不会特别的卡(有一点还是很正常的,毕竟是老古董了。),后来我把3D的什么的都去掉了,只是在打开关闭放大放小的地方使用华丽的特效之后,就好很多了(3D还要让这机子的命啊~!)
      这里简单的记录一下,一呢给大家看看,二呢记录一下,让自己以后不到网上到处找两个软件包的名字。