精华内容
下载资源
问答
  • linux终端字符串转字符画

    千次阅读 2019-03-28 10:49:22
    概述: 将字符串(非图像)转换成字符画,效果如图: __ __ ___ ______________ _____ _____/ /_ ___ _____/ /__ / _ \/ ___/ ___/ __ \/ ___/ / ___/ __ \/ _ \/ ___/ //_/ / ...
    概述:

    将字符串(非图像)转换成字符画,效果如图:

                                         __              __
      ___  ______________  _____   _____/ /_  ___  _____/ /__
     / _ \/ ___/ ___/ __ \/ ___/  / ___/ __ \/ _ \/ ___/ //_/
    /  __/ /  / /  / /_/ / /     / /__/ / / /  __/ /__/ ,<
    \___/_/  /_/   \____/_/      \___/_/ /_/\___/\___/_/|_|
    
    
    
    安装:

    依赖工具figlet

    apt install figlet
    
    使用:

    基本使用

    figlet error check  #error check是内容
    

    指定字体

    figlet -f slant error check
    

    查看字体列表

    figlist
    

    查看字体效果

    showfigfonts
    
    展开全文
  • 主要给大家介绍了关于Linux字符终端如何用鼠标移动一个红色矩形的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Linux具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • Linux 字符画趣味用法

    千次阅读 2014-05-23 11:09:04
    字符画可以网上下载,不过linux本身也自带了一些字符画工具。我这里举例用一个叫cowsay的小工具生成。这个工具很小,网上也很容易下载到用fstp传到/opt目录下,解压 安装 使用: 这样就获得了一个好玩的字符画把...
    做码农是很苦逼,但要有苦中作乐的精神。推荐个好玩的字符画玩法。

    首先看下效果:


    每次连接上一个session,都会跳出这种有趣的字符画界面。
    字符画可以网上下载,不过linux本身也自带了一些字符画工具。我这里举例用一个叫cowsay的小工具生成。这个工具很小,网上也很容易下载到
    用fstp传到/opt目录下,解压

     
    安装
     
     
    使用:

     

    这样就获得了一个好玩的字符画
    把这个字符画复制下来,放到/etc/motd文件里( motd文件是提醒管理员每次连接后要做的工作) ,每次连接就会有好玩的字符画跳出来。


     
     
    展开全文
  • Linux字符终端用鼠标移动一个红色矩形

    千次阅读 多人点赞 2019-05-12 19:06:21
    闲的想要吃Droppings,被很多人嫌弃。我先声明,这些事没有任何意义,调一个API能解决的事,非要自己去做,而且还做的不好,那就是傻逼,是的,我就是傻逼...既然 /dev/fb0 被抽象成了显示器,可以在字符终端通过操...

    闲的想要吃Droppings,被很多人嫌弃。我先声明,这些事没有任何意义,调一个API能解决的事,非要自己去做,而且还做的不好,那就是傻逼,是的,我就是傻逼。

    仅仅因为我爸来了,老年人和我观点不一致,不想交流,然而又能干什么,只能干点没有意义的事假装在工作了。


    一切皆文件! UNIX已经说了。埃里克雷蒙德这样说的,不服吗?他有枪。
    在这里插入图片描述

    既然 /dev/fb0 被抽象成了显示器,可以在字符终端通过操作映射了 /dev/fb0 的内存在屏幕上画32bit真彩图,那么如何操作鼠标键盘呢?

    /dev/input/mouse0 可以用来读取鼠标事件。当你在字符终端cat它并移动鼠标时,它貌似告诉你有事情发生了,但是你却无法解读:
    在这里插入图片描述

    为了找到解读它的正确方法,要么谷歌,要么百度,要么还有一个最直接的方法,那就是查Linux内核源码中关于mouse0这个文件的read回调函数:

    static ssize_t mousedev_read(struct file *file, char __user *buffer,
                     size_t count, loff_t *ppos)
    {
        struct mousedev_client *client = file->private_data;
        struct mousedev *mousedev = client->mousedev;
        // mousedev_client结构体里查找到ps2的大小是6个字节。
        signed char data[sizeof(client->ps2)];
        int retval = 0;
    
        spin_lock_irq(&client->packet_lock);
    
        if (!client->buffer && client->ready) {
        	// 这里就是核心了,继续跟过去
            mousedev_packet(client, client->ps2);
            client->buffer = client->bufsiz;
        }
        ...
    

    我们看看 mousedev_packet 是如何组装包的:

    static void mousedev_packet(struct mousedev_client *client,
                    signed char *ps2_data)
    {
        struct mousedev_motion *p = &client->packets[client->tail];
    
        ps2_data[0] = 0x08 |
            ((p->dx < 0) << 4) | ((p->dy < 0) << 5) | (p->buttons & 0x07);
        ps2_data[1] = mousedev_limit_delta(p->dx, 127);
        ps2_data[2] = mousedev_limit_delta(p->dy, 127);
        p->dx -= ps2_data[1];
        p->dy -= ps2_data[2];
    ...
    

    非常明白,我不管别的,我也没有动机去学,我现在就是想知道鼠标的X,Y坐标:

    • p->dx,p->dy从名字上和从代码上都可以看出,这是 相对于上一次 的坐标的变化!

    所有信息都有了。

    那么,现在,可以写代码了:

    #include <stdio.h>
    #include <fcntl.h>
    #include <sys/mman.h>
    #include <linux/fb.h>
    #include <stdlib.h>
    
    // 正方形边长为100个像素点
    #define LENGTH	100
    
    // 显示器显存的抽象
    unsigned int *mem = NULL;
    // 保存上一次的屏幕
    unsigned int *old_mem = NULL;
    // 屏幕信息
    static struct fb_var_screeninfo info;
    int mouse_fd, fb_fd;
    
    // 正方形涂成红色
    int start = 0xffff0000;
    
    int main(int argc, char **argv)
    {
    	signed char mouse_event[6];
    	char rel_x, rel_y;
    	int old_x = 0, old_y = 0;
    	int abs_x = 0, abs_y = 0;
    
    	mouse_fd = open("/dev/input/mouse0", O_RDONLY);
    	fb_fd = open("/dev/fb0", O_RDWR);
    
    	ioctl(fb_fd, FBIOGET_VSCREENINFO, &info);
    
    	mem = (unsigned int *)mmap(NULL, info.xres*info.yres*info.bits_per_pixel/8, PROT_READ|PROT_WRITE, MAP_SHARED, fb_fd, 0);
    
    	while(read(mouse_fd, &mouse_event[0], 6)) {
    		int i, w, h;
    		static int idx = 0;
    
    		// 按照内核mousedev_packet的定义,解析出相对位移。
    		rel_x = (char) mouse_event[1];
    		rel_y = (char) mouse_event[2];
    		// 计算绝对位移
    		abs_x += rel_x;
    		abs_y -= rel_y;
    		if (abs_x <= 0 || abs_x >= info.xres - LENGTH || abs_y <= 0 || abs_y >= info.yres - LENGTH) {
    			continue;
    		}
    
    		if (old_mem == NULL) {
    			old_mem = (unsigned int *)mmap(NULL, info.xres*info.yres*info.bits_per_pixel/8, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0);
    			if (old_mem == NULL) {
    				exit(1);
    			}
    		} else {
    			// 恢复上一次正方形区域里的像素
    			for (w = old_x; w < old_x + LENGTH; w++) {
    				for (h = old_y; h < old_y + LENGTH; h++) {
    					idx = h*info.xres + w;
    					mem[idx] = old_mem[idx];
    				}
    			}
    			old_x = abs_x;
    			old_y = abs_y;
    		}
    
    		// 保存当前的像素,以便下一次恢复
    		for (w = abs_x; w < abs_x + LENGTH; w++) {
    			for (h = abs_y; h < abs_y + LENGTH; h++) {
    				idx = h*info.xres + w;
    				old_mem[idx] = mem[idx];
    			}
    		}
    
    		// 根据鼠标的位置涂抹红色矩形
    		for (w = abs_x; w < abs_x + LENGTH; w++) {
    			for (h = abs_y; h < abs_y + LENGTH; h++) {
    				idx = h*info.xres + w;
    				mem[idx] = start;
    			}
    		}
    	}
    
    	return 0;
    }
    

    运行它,然后在字符终端移动鼠标,效果如下:
    在这里插入图片描述
    在这里插入图片描述

    嗯,矩形随着鼠标而移动,并且不会破坏任何所到之处的字符。


    现在,我来回顾一下这个周末做的这些事情,意味着什么。

    • 我可以在字符终端上画32位真彩图;
    • 我可以检测到鼠标键盘的事件并且反应。

    这意味着,如果有时间和精力,我可以实现一个GUI系统了。

    当然,GUI系统和网络协议栈那是隔行如隔山,肯定会遇到超级多的麻烦,不是仅仅读写两个文件:

    • /dev/fb0
    • /dev/input/mouse0

    就可以搞定的。

    事实上,真正的GUI系统从来不用这种方式。它们貌似在反抗着 UNIX一切皆文件 的理念,并且证明这样会更好!哦,对了,Windows GUI的成功就是一个证明,还有后来最新版本的MacOS…


    说什么字符终端,字符也是 画出来的 。没什么大不了的。只不过,想要用像素去设置字符,那就要了解一下 字符点阵 的information了…这又是另一个领域的话题。


    浙江温州皮鞋湿,下雨进水不会胖。

    展开全文
  • linux字符终端图片展示

    千次阅读 2019-01-18 11:48:54
    所用操作系统概述:linux3.2.0内核,64位的Ubuntu12.04虚拟机 ...必要说明的一点是直接操作fb0只能在除了tty7图形界面的其它终端才有效,具体原因我也不是很清楚,感觉像是图形界面下看不到真正的tt...

    所用操作系统概述:linux3.2.0内核,64位的Ubuntu12.04虚拟机
      关于linux下操作fb0的介绍网上已经有很多资料了,大家可以随便搜索一下就能找到大量的比较详细的原理性的东西的介绍,我也是根据网上的资料自己写了一个小的测试程序,拿出来跟大家分享。必要说明的一点是直接操作fb0只能在除了tty7图形界面的其它终端才有效,具体原因我也不是很清楚,感觉像是图形界面下看不到真正的tty终端,所以没办法显示吧,具体原因有大神也可以给解答一下。
      我测试的时候是用的tty1字符终端(在图形界面下,同时按Ctrl+Alt+F1就可以进入tty1字符终端界面),实际效果如图,源码见附件。但是在安卓下测试这个程序也不能正常工作,除非是在机器启动时,系统在进入linux系统但还没运行安卓应用之前测试的时候是可以直接写的,但是感觉跟Ubuntu下现象还是不一致,显示的不是很正常。谁了解怎么在安卓下直接操作/dev/graphics/fb0也可以留言。
      测试的效果图如下,代码包连接如下https://download.csdn.net/download/jxhln/10925387,在这里插入图片描述
    2019-01-18 13:52 修正
      下面的代码我又用另外版本的虚拟机测试了一下,发现不正常工作,虽然也能显示自己写进去的东西,但是与实际图片相差甚远,后来发现同一个Windows主机上安装的虚拟机得到fb中line_length还不一样,由于这个原因导致在填充显示器的实际行时一个每一行需填充8192字节的像素,而另一个每一行只需填充3200字节的像素,故导致其中一个虚拟机显示正常,另外一个虚拟即显示不正常,故需根据这个line_length改变自己程序中实际填充的字节数才能得到想要的图片(对照下面的程序,虚拟机line_length为8192的fb_width为8193/4=2048,line_length为3200的fb_width=3200/4=8,除以4是因为下面的bits_per_pixel为32位,故每4字节代表一个实际像素点)。
      调用ioctl(fbFd, FBIOGET_FSCREENINFO, &finfo)和ioctl(fbFd, FBIOGET_VSCREENINFO, &vinfo) 可以得到fb下列fixed和variable配置信息,其中fbFd为fb0的设备描述符,finfo和vinfo为保存fb配置信息的结构,定义如下

    #include <linux/fb.h>  //struct fb_fix_screeninfo和struct fb_var_screeninfo的头文件
    struct fb_fix_screeninfo finfo;
    struct fb_var_screeninfo vinfo;`
    

    在这里插入图片描述

    测试的C代码如下:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <fcntl.h>
    #include <linux/fb.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <sys/mman.h>
    #define  PIC_DAT  1
    #define  PIC_DAT2 2
    #define  DM16A_1  3
    #define  DM16A_3  4
    
    #define  PIC_SELECT 1
    
    #if (PIC_SELECT == PIC_DAT)
    #include "pic_data.h"
    #elif (PIC_SELECT == DM16A_3)                                                                                    
    #include "dm16a_3.h"
    #elif (PIC_SELECT == DM16A_1)
    #include "dm16a_1_dealed.h"
    #elif (PIC_SELECT == PIC_DAT2)
    #include "pic_data2.h"
    #endif
    
    
    #define   FB_DEV  "/dev/fb0"
    //#define   FB_DEV  "/dev/graphics/fb0"
    /***************** function declaration ******************/
    void usage(char *msg);
    int  fb_open(char *fb_device);
    int  fb_close(int fd);
    int  fb_stat(int fd, int *width, int *height, int *depth);
    void *fb_mmap(int fd, unsigned int screensize);
    int  fb_munmap(void *start, size_t length);
    void deal_pic_data2show_buffer(unsigned char * des,const unsigned char * src,unsigned int len);
    
    /************ function implementation ********************/
    int main(int argc, char *argv[])
    {
        /*
        * declaration for framebuffer device
        */
        int             fbdev;
        char           *fb_device;
        unsigned char  *fbmem;
        unsigned int    screensize;
        unsigned int    fb_width;
        unsigned int    fb_height;
        unsigned int    fb_depth;
         unsigned int    x;
        unsigned int    y;
        unsigned int    show_width;
        unsigned int    show_height;
        unsigned char   * show_buffer;
        unsigned int    data_len;
        unsigned int    len;
        unsigned char   bytes_per_pix;
        /*
        * open framebuffer device
        */
        if(PIC_SELECT != PIC_DAT || PIC_SELECT != PIC_DAT2
                || PIC_SELECT != DM16A_1 || PIC_SELECT != DM16A_3)
        if ((fb_device = getenv("FRAMEbuffer")) == NULL)
            fb_device = FB_DEV;
        fbdev = fb_open(fb_device);
        /*
        * get status of framebuffer device
        */
        fb_stat(fbdev, &fb_width, &fb_height, &fb_depth);
        /*
        * map framebuffer device to shared memory
        */
        bytes_per_pix = fb_depth / 8;
        screensize = fb_width * fb_height * bytes_per_pix;
        fbmem = fb_mmap(fbdev, screensize);
    #if 0   
        show_width  = fb_width;
        show_height = fb_height; 
    #endif
        show_width  = pic_width;
        show_height = pic_height; 
        data_len = show_width * show_height * 4;
        show_buffer = malloc(data_len);
        if(show_buffer == NULL)
            return -1;
    #if (PIC_SELECT == PIC_DAT)
            memset(show_buffer,0xff,data_len);
            memcpy(show_buffer,pic_buf,sizeof(pic_buf));
    #else                                                                                                            
            len = sizeof(pic_buf);
            deal_pic_data2show_buffer(show_buffer,pic_buf,len);
    #endif
    while(1){
            for(x = 0;x < show_height;x ++)
                for(y = 0;y < show_width * bytes_per_pix;y ++)
                    fbmem[x * fb_width * bytes_per_pix + y] = 
                        show_buffer[x * show_width * bytes_per_pix + y];
            //memset(fbmem,0xff,fb_height * fb_width * 4);
        }
        fb_munmap(fbmem, screensize);
        /*
        * close framebuffer device
        */
        fb_close(fbdev);
        return (0);
    }
    /*
    * open framebuffer device.
    * return positive file descriptor if success,
    * else return -1.
    */
    int fb_open(char *fb_device)
    {
        int  fd;
        if ((fd = open(fb_device, O_RDWR)) < 0) {
            perror(__func__);
            return (-1);
        }
        return (fd);
    }
    /*
    * get framebuffer's width,height,and depth.
    * return 0 if success, else return -1.
    */
    int fb_stat(int fd, int *width, int *height, int *depth)
    {
        struct fb_fix_screeninfo fb_finfo;
        struct fb_var_screeninfo fb_vinfo;
        if (ioctl(fd, FBIOGET_FSCREENINFO, &fb_finfo)) {
            perror(__func__);
            return (-1);                                                                                             
        }
        if (ioctl(fd, FBIOGET_VSCREENINFO, &fb_vinfo)) {
            perror(__func__);
            return (-1);
        }
    *width = fb_vinfo.xres;
        *height = fb_vinfo.yres;
        *depth = fb_vinfo.bits_per_pixel;
        return (0);
    }
    /*
    * map shared memory to framebuffer device.
    * return maped memory if success,
    * else return -1, as mmap dose.
    */
    void  * fb_mmap(int fd, unsigned int screensize)
    {
        caddr_t         fbmem;
        if ((fbmem = mmap(0, screensize, PROT_READ | PROT_WRITE,
        MAP_SHARED, fd, 0)) == MAP_FAILED) {
            perror(__func__);
            return (void *) (-1);
        }
        return (fbmem);
    } 
    /*
    * unmap map memory for framebuffer device.
    */
    int fb_munmap(void *start, size_t length)
    {
        return (munmap(start, length));
    }
    /*
    * close framebuffer device
    */
    int fb_close(int fd)
    {
        return (close(fd));
    }
    void deal_pic_data2show_buffer(unsigned char * des,const unsigned char * src,unsigned int len){
    
        int i = 0;
        unsigned char show_data;
        unsigned short tmp_data;
        for(i = 0;i < (len / 2);i ++){
            tmp_data = (src[i * 2] << 8 | src[i * 2 + 1]);
            show_data = (tmp_data >> 6);
            des[i * 4]     = show_data;                                                                              
            des[i * 4 + 1] = show_data;
            des[i * 4 + 2] = show_data;
            des[i * 4 + 3] = 0xff;
        }
    
    }
    
    ```                                            -----  大白
    
    展开全文
  • Linux系统字符终端界面的编程(1)——CURSES库简介.pdf
  • F1-F6是字符终端界面。生效文件在: /etc/inittab 一般来说,机器启动好直接就有6个字符终端。 F7- F12是图形终端界面。生效文件在: /etc/X11/xinit/xinitrc 一般默认为F7。 如果要指定启动X的 时候用哪个终端,...
  • linux终端实现骇客帝国的字符雨动画

    千次阅读 2019-01-27 10:12:46
    先下载数字雨软件,即在终端输入:(Ubuntu系统且可以上网才可以安装) sudo apt-get install cmatrix 然后执行程序: cmatrix 执行过程: 在数字雨动画播放过程中还可以使用命令控制字体颜色,粗细,速度等...
  • ) 1、桌面环境:找到退出系统的按钮或菜单项 2、字符终端:exit命令或者Ctrl+d键 4、系统关闭与重启 1、桌面环境:找到关机或重启的按钮 2、字符终端:关机命令: # shutdown now;重启命令:# reboot 5、启动Shell...
  • Linux系统字符终端自动登录问题

    千次阅读 2012-11-29 15:42:47
    Linux系统字符终端自动登录的一解决办法: Linux中如何自动登录虚拟控制台 This article describes how to automatically login to a virtual console at the end of the boot process. This article only...
  • Linux 命令行字符画工具

    千次阅读 2019-12-12 22:22:14
    公众号: write_simple_demo,专注linux 介绍 此项目移植于网页版字符画生成...移植到Linux下后,不仅可以更方便生成字符画,也可应用于linux命令行模式下,使其文字提示更加醒目美观。 文件说明 ascii_signature.s...
  • 前几天自己配好了vim作为C语言开发环境,加了几个插件,语法高亮、字体大小都改了改,在gvim下...然后我保存这个文件,拿到字符终端打开: 就这样了,敲几下键盘全是混乱的字符。 后来经过排查发现
  • 查看已安装的终端字体 ls /usr/share/consolefonts/ 设置终端字体 sudo dpkg-reconfigure console-setup 或者 sudo vim /etc/default/console-setup ACTIVE_CONSOLES="/dev/tty[1-6]" CHARMAP="UTF-8" CODESET=...
  • Linux终端字符颜色设置

    千次阅读 2012-09-01 12:50:58
    下面是Linux系统终端颜色的设置方式: 终端字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关,shell,python,perl, C, C++等均可以调用。 转义序列是以 ESC 开头,可以用 \033 完成...
  • linux字符终端浏览器-----Lynx

    万次阅读 2009-05-25 15:56:00
    Lynx (一) Lynx 简介 Lynx 是...Lynx 可以运行在很多种 操作系统下,如VMS, UNIX, Windows 95, Windows NT等,当然也包括Linux。 由于没有漂亮的图形界面,所以 Lynx 占用资源极少,而且速度很快。另外 Lynx 还是唯一能
  • linux终端(字符界面)setup显示乱码
  • 最近在一个archlinux下面写些东西,当时我改了/etc/inputrc里面的一些东西,然后在终端里面没法输入a,但是能输入大写A,在网页或者编辑器里面可以输入a,当时不知道是什么原因,网上搜了半天,在...
  • 设置linux终端字符颜色

    千次阅读 2015-06-03 12:20:47
    本文介绍了如何让终端字符有颜色
  • 字符终端设备的打开操作 当我们需要使用一个字符终端设备的时候,首先需要打开它。而打开这一动作,在UNIX下面通常是由一些守护进程所发起的,比如当我们在登录到一个虚终端的时候,通常是由一个进程agetty来打开这...
  • 这篇博客的内容其实没有那么重要,只要你会了Linux和类Unix终端命令行光标移动,就可以通过移动光标位置同时使用退格键删除就行了。 删除字符 删除的快捷键就是上面的这张图片,参考下Linux和类Unix终端命令行...
  • linux终端ANSI转义字符

    千次阅读 2019-06-06 13:08:43
    https://www.cnblogs.com/qxhn/p/10984364.html
  • linux终端 字符界面 显示乱码

    万次阅读 2011-03-02 17:35:00
    方法一:配置SSH工具 SecureCRT中文版配置 ...[全局选项]→[默认会话]→[编辑默认设置]→...内核补丁:字符终端下显示UTF-8字符 http://blogold.chinaunix.net/u/13265/showart.php?id=1008020    
  • Linux 终端显示字符颜色的代码

    千次阅读 2019-01-20 14:29:06
    linux终端看起来很单调,其实是可以显示各种颜色的文字的。 echo -e "\033[文字背景颜色;文字颜色m 你要显示的内容 \033[0m" # echo -e "\e[32;1m[OK]\e[0m" [OK] 就显示了嫩绿色的OK字样 ...
  • Linux 字符集设置

    千次阅读 2016-08-21 15:54:47
    本文总结如何进行linux字符集的设置。
  • linux 终端 backspace不能删除字符

    千次阅读 2017-08-16 16:41:23
    linux/unix平台的经常使用scanf从键盘获取字符,输出字符后按Backspace键删除时,会出现^H,这对习惯了按Backspace键删除的用户来说,感觉非常别扭,虽然可以通过Ctrl+Backspace组合键实现删除功能 可通过stty...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 165,468
精华内容 66,187
关键字:

linux字符画终端

linux 订阅