diff --git a/app/common/directives/serial-console.js b/app/common/directives/serial-console.js
index 8227e18..4324708 100644
--- a/app/common/directives/serial-console.js
+++ b/app/common/directives/serial-console.js
@@ -14,6 +14,27 @@
   return true;
 };
 
+function measureChar(term) {
+  var span = document.createElement('span');
+  var fontFamily = 'courier-new';
+  var fontSize = 15;
+  var rect;
+
+  span.textContent = 'W';
+  try {
+    fontFamily = term.getOption('fontFamily');
+    fontSize = term.getOption('fontSize');
+  } catch (err) {
+    console.log('get option failure');
+  }
+  span.style.fontFamily = fontFamily;
+  span.style.fontSize = fontSize + 'px';
+  document.body.appendChild(span);
+  rect = span.getBoundingClientRect();
+  document.body.removeChild(span);
+  return rect;
+}
+
 window.angular && (function(angular) {
   'use strict';
 
@@ -34,8 +55,30 @@
             Terminal.applyAddon(attach);  // Apply the `attach` addon
             Terminal.applyAddon(fit);     // Apply the `fit` addon
 
+            var border = 10;
             var term = new Terminal();
-            term.open(document.getElementById('terminal'));
+            var terminal = document.getElementById('terminal');
+            var customConsole;
+            var charSize;
+            var termContainer;
+
+            term.open(terminal);
+            customConsole = configJSON.customConsoleDisplaySize;
+
+            if (customConsole != null) {
+              charSize = measureChar(term);
+              termContainer = document.getElementById('term-container');
+              if (termContainer != null) {
+                if (customConsole.width) {
+                  termContainer.style.width =
+                      (charSize.width * customConsole.width + border) + 'px';
+                }
+                if (customConsole.height) {
+                  terminal.style.height =
+                      (charSize.height * customConsole.height + border) + 'px';
+                }
+              }
+            }
             term.fit();
             if (configJSON.customKeyEnable == true) {
               term.attachCustomKeyEventHandler(customKeyHandlers);
