急急急:怎么取得linux系统的分辨率

sfly47 2008-11-26 09:09:08
最近有个任务,要把win32中的程序移植到linux中,其中需要取系统的分辨率,但由于小弟我对linux编程不熟,想请教一下通过什么函数可以取linux系统的分辨率,万分感谢!!!
...全文
495 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjpdhappy 2011-04-29
  • 打赏
  • 举报
回复
最近也涉及到这方面的知识,对frame buffer编程即可获得当前显卡缓冲区的分辨率数据
puheavy123 2009-06-18
  • 打赏
  • 举报
回复
cat /etc/X11/xorg.conf里面就有lz所需要的信息
zhouxingyu896 2009-06-17
  • 打赏
  • 举报
回复
学习

zjwumei 2009-06-17
  • 打赏
  • 举报
回复
好厉害呀
hanb99 2008-11-30
  • 打赏
  • 举报
回复
学习了
do_one_thing 2008-11-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chenzhixin 的回复:]
GDK可以用这个函数

gint                gdk_screen_get_width                (GdkScreen *screen);
gint                gdk_screen_get_height              (GdkScreen *screen);

单纯的C语言我不清楚

void
get_screen_size(int *width_p, int *height_p)
{
*width_p  = DisplayWidth(dpy,  screen) ;
*height_p = DisplayHeight(dpy, screen) ;
}


[/Quote]强
chenzhixin 2008-11-28
  • 打赏
  • 举报
回复
GDK可以用这个函数

gint gdk_screen_get_width (GdkScreen *screen);
gint gdk_screen_get_height (GdkScreen *screen);

单纯的C语言我不清楚

void
get_screen_size(int *width_p, int *height_p)
{
*width_p = DisplayWidth(dpy, screen) ;
*height_p = DisplayHeight(dpy, screen) ;
}

cjx_epop 2008-11-26
  • 打赏
  • 举报
回复
一、查看显卡相关信息
  glxinfo | grep -i rend
  direct rendering: Yes
  运行这个命令,如果显示不是“Yes”,说明还需要自己去安装一下驱动(显卡)。
1、在linux的终端上执行:
  [root@localhost ~]# glxinfo | grep -i rend
  direct rendering: No (If you want to find out why, try setting LIBGL_DEBUG=verbose)
  OpenGL renderer string: Mesa GLX Indirect
2、在txt模式下:
  [root@localhost ~]# glxinfo | grep -i rend
  Error:unable to open display
  两者显示结果不一样,原因:
是X终端与文本模式(console)下区分,在console下,显卡驱动还没有启用,所以无法得到信息。
二、显示器分辨率及刷新率设置
1、X终端下显示器分辨率及刷新率设置
  刷新率和分辨率可以在/etc/X11/xorg.conf中设置
(1)对显示器行频(水平分辨率)和场频(垂直分辨率)的设置
  在xorg.conf中有类似一段:
  Section "Monitor"
  Identifier "Monitor0"
  VendorName "Monitor Vendor"
  ModelName "206STUDIO"
  HorizSync 30.0 - 70.0
  VertRefresh 50.0 - 160.0
  EndSection
  其中HorizSync,VertRefresh分别是显示器行频(水平分辨率)和场频(垂直分辨率)的设置
应该根据显示器的性能进行设置,他们的值决定了显示分辨率和刷新频率可能取值的范围。

(2)对首先和可选分辨率的设置
  在xorg.conf中有类似一段:
  Section "Screen"
  Identifier "Screen0"
  Device "Videocard0"
  Monitor "Monitor0"
  DefaultDepth 24
  SubSection "Display"
  Depth 24
  Modes "1024x768" "800x600" "640x480" "1280x1024"
  EndSubSection
  EndSection
  行 :
  Modes "1024x768" "800x600" "640x480"
  设置了三种可选的分辨率,排在最前面的就是首选的分辨率,也就是一般生效的分辨率。X启动时如果首选的分辨率无效,比如过高,会依次尝试后面的分辨率。
2、文本模式下显示器分辨率及刷新率设置
(1)、grub的:
/boot/grub/menu.lst 文件中
title Debian GNU/Linux, kernel 2.6.22-3-686
root (hd0,5)
kernel /vmlinuz-2.6.22-3-686 root=/dev/hda1 ro vga=794
initrd /initrd.img-2.6.22-3-686
savedefault
说明:
vga=794,修改此值可以修改在文本模式下的分辨率
vga=794  => 1280x1024x16
vga=788  => 800x600x16
(2)、lilo的基本也差不多。
三、内核不能识别出显示是否就进不了X-Windows ?
(1)显卡驱动:内核提供的驱动与显示供应商提供的驱动的差别在于3D,内核不认显卡是进不了X的,不过,可以用vesa的标准驱动,因为各个厂家提供的显卡都支持vesa的标准
(2)、信息用Xorg -configure 自动获取的

*********************************************************************************** Monitor本条目介绍了显示器的相关知识。 场频 场频又称为“垂直扫描频率”或“刷新率”。指单位时间(以秒计)之内电子枪对整个屏幕进行扫描的次数,通常以赫兹(Hz)表示。以85Hz刷新率为例,它表示显示器的内容每秒钟刷新85次。
CRT 显示器上显示的图像是由很多荧光点组成的,每个荧光点都由于受到电子束的击打而发光,不过荧光点发光的时间很短,所以要不断地有电子束击打荧光粉使之持续发光。
电子束不能同时轰击屏幕上的两个点,因此显示器在工作时,以极快的速度从视频卡读取数据,同时由电子枪的偏转电路部分控制偏转线圈对电子束射出的方向进行改变,使电子束从屏幕左上角开始,从左至右,从上至下,依次对每个点进行轰击,虽然时间上有先后顺序。
但由于电子束把屏幕整个扫描一次只需 10~20ms的时间,加上荧光体的辉光残留和人眼的视觉暂留现象,所以只要刷新够快,刷新率够高,人眼就能看到持续、稳定的画面,不会感觉到明显的闪烁和抖动。垂直扫描频率越高,闪烁情况越不明显,眼睛也就越不容易疲劳。
从理论上来讲,只要刷新率达到85Hz,也就是每秒刷新85次,人眼就感觉不到屏幕的闪烁了,但实际使用中往往有人能看出85Hz刷新率和100Hz刷新率之间的区别,所以从保护眼睛的角度出发,刷新率仍然是越高越好。
行频 行频又称为“水平扫描频率”,指电子枪每秒在荧光屏上扫过的水平线的数量,其值等于“场频 × 垂直分辨率×1.04”,单位为KHz(千赫兹)。行频是一个综合分辨率和场频的参数,该值越大,显示器可以提供的分辨率越高,稳定性越好。
以 800*600 的分辨率、85Hz的场频为例,显示器的行频至少应为“600*85=51KHz”。
目前CRT显示器比较主流的行频系列是:70KHz,85(86)KHz,96KHz等。
windows是用场频和分辨率来表示显示模式,而Linux的X配置文件里面同时用到用场频和行频和分辨率三个参数。
警告:
老的或某些显示器缺乏保护电路,参数设置错误可能造成硬件损坏。

注:
窗体在桌面中显示不正,但在WINDWOS中显示正中。不调整显示器面板按钮办法:
(1)输入命令:xvidtune
(2)调整Left/Right;Up/Down
(3)test
(4)show 输出到终端中。
(5)apply
(6)复制输出内容至/etc/X11/xorg.conf中,在Section "Monitor"
中添加ModeLine 输出内容
在Section "Screen"中添加Model内容。
(6)重启X
详细如下:
# Xorg configuration created by system-config-display

Section "ServerLayout"
Identifier "single head configuration"
Screen 0 "Screen0" 0 0
InputDevice "Keyboard0" "CoreKeyboard"
EndSection

Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
Option "XkbModel" "pc105"
Option "XkbLayout" "us+inet"
EndSection

Section "Monitor"

#hsync range 0: 30.00 - 70.00
#vsync range 0: 50.00 - 160.00
Identifier "Monitor0"
ModelName "Samsung Samtron 76DF(X)/77DF(X)/78DF"
HorizSync 30.0 - 70.0
VertRefresh 50.0 - 160.0
ModeLine "1024x768" 94.5 1024 1088 1184 1376 768 769 772 808 +hsync +vsync
Option "dpms"
EndSection

Section "Device"
Identifier "Videocard0"
Driver "nv"
EndSection

Section "Screen"
Identifier "Screen0"
Device "Videocard0"
Monitor "Monitor0"
DefaultDepth 24
SubSection "Display"
Depth 16
Modes "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 32
Modes "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 24
Modes "1024x768" "832x624" "800x600" "720x400" "640x480" "640x400" "640x350"
EndSubSection
EndSection

你可以写程序读该配置文件,然后用read读该配置文件中的分辨率,通过strstr判断分辨率的关键字。
shang12 2008-11-26
  • 打赏
  • 举报
回复
分别率..你不知道LINUX很多都是有配置文件的么?你应该去找找Xwindow里面的配置文件...不知对的对的窝..我以前有去改过但是忘了在哪了..
sfly47 2008-11-26
  • 打赏
  • 举报
回复
自己顶起来,各位大哥帮帮忙呀!
android2008 2008-11-26
  • 打赏
  • 举报
回复
不懂,帮顶

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧